Hallo zusammen,
ich habe in meinem Programm nicht unbedingt ein Fehler gefunden aber es löst ein Fehlverhalten aus.
Ich rede konkret von einer Nachrichten-Queues mit Erzeuger- Verbraucher-Schleife.
Bei einem einfachklick auf ein Button wird eine Aktion über die serielle Schnittstelle ausgelöst.
Nach dem abarbeiten der Aktion müssen erst andere Bedingungen erfüllt werden um die Aktion erneut auszuführen.
Jetzt ist mir aufgefallen, wenn der Benutzer ein doppelkick ausführt bring das die Reihenfolge aus dem Takt.
Die anderen Bedingungen sind noch nicht erfüllt und die Aktion wird erneut ausgeführt.
Wie kann man ein Doppelklick programmtechnisch unterbinden?
Hallo Fuchs,
Zitat:Wie kann man ein Doppelklick programmtechnisch unterbinden?
Was genau ist für dich ein "Doppelklick"?
Etwas, was Windows als spezielle Useraktion erkennt (Programmstart per Icon-Doppelklick) oder einfach "zweimal nacheinander klicken"?
Wie groß ist die Zeitspanne zwischen den Klicks?
Zitat:Jetzt ist mir aufgefallen, wenn der Benutzer ein doppelkick ausführt bring das die Reihenfolge aus dem Takt.
Die anderen Bedingungen sind noch nicht erfüllt und die Aktion wird erneut ausgeführt.
Warum startest du eine Aktion, wenn die Bedingungen dafür nicht erfüllt sind???
Die Eventstruktur kann Doppelklicks erkennen, also kannst du auch darauf reagieren. Wie und wo die Reaktion erfolgt, hängt von deinem Programm ab…
Hallo GerdW,
danke für die schnelle Antwort.
Ich meine ein normaler Doppelklick mit der Maus.
Zitat:Die Eventstruktur kann Doppelklicks erkennen, also kannst du auch darauf reagieren. Wie und wo die Reaktion erfolgt, hängt von deinem Programm ab…
Wo kann das bei der Eventstruktur eingestellt werden?
VG Fuchs
Hallo Fuchs,
du kannst MouseClicks generell als Event anfangen. Die Event-Properties bieten dann noch weitere Infos, wie z.B. welcher Button benutzt wurde oder ob es sich um einen Doppelklick handelt!
Edit: Jetzt ein Beispiel:
[
attachment=62599]
Hallo GerdW,
ich habe ein boolisches Element.
Es soll in der Erreignis- Verbraucherschleife egal sein, ob der Benutzer ein "Einfachklick" oder "Doppelklick" ausführt.
In die Queue soll sichergestellt werden das die Verbraucherschleife nur ein mal ausgeführt wird.
Mit deiner Anregung komme ich nicht weiter. Die Ereignisstruktur kann nicht "Maustaste gedrückt" und "Wertänderung" gleichzeitig verarbeiten.
Mit der Element Referenz kann auch nicht gearbeitet werden. Da stört das "Schaltverhalten".
VG
Fuchs
Hallo Fuchs,
der Erzeuger kann aber trotzdem prüfen, ob es ein Doppelklick war:
Du kannst beim ValueChange-Event den Zeitpunkt abfragen und merken. Wenn ein neues ValueChange kommt, kannst du den zeitlichen Abstand zum vorhergehenden prüfen und das Event/Kommande nur bei Bedarf an den Consumer weiterleiten…
Hallo Fuchs,
jetzt noch darauf achten, dass du keinen "default if unwired"-Tunnel verwendest…
Oder eine Feedbacknode verwenden anstatt Shiftregister, gerade wenn eine Überprüfung nur innerhalb eines Cases gebraucht wird, macht das den Code doch deutlich übersichtlicher:
[
attachment=62601]
Gruß, Jens