Seite 1 von 2
Timer auslesen bzw. gestartet?
Verfasst: 12.02.2016 11:59
von techniker
Hi,
Gibt es eine Möglichkeit herauszufinden, ob ein Timer (AddWindowTimer) bereits gestartet wurde? (oder den Wert lesen?)
Hintergrund:
Beim Auftreten eines bestimmten Ereignisses muss ich 30Sek warten und dann eine Aktion ausführen (hier wird der Timer wieder gelöscht).
Um nun das ganze im "Hintergrund" laufen zu lassen, wollte ich das mit Events lösen.
Das Problem: Das initiale Ereignis kann mehrmals auftreten, wobei aber nur das ERSTE Ereignis den Timer triggern soll.
Als Workaround muss ich die Info, dass der Timer läuft, in eine Variable packen.. :-/
Re: Timer auslesen bzw. gestartet?
Verfasst: 12.02.2016 12:09
von Bisonte
techniker hat geschrieben:Als Workaround muss ich die Info, dass der Timer läuft, in eine Variable packen.. :-/
Das ist nicht nur ein Workaround.
Picard würde sagen : "Machen Sie es so !"

Re: Timer auslesen bzw. gestartet?
Verfasst: 12.02.2016 12:14
von RSBasic
Wenn ich zwei Timer mit demselben Timerwert erstelle, dann wird bei mir immer nur ein Timer-Event pro eingestellte Zeit ausgelöst.
Also wenn ich beispielsweise 2x AddWindowTimer(0, 123, 1000) aufrufe, wird das Event trotzdem nur einmal und nicht doppelt ausgelöst. Oder meinst du was anderen?
Re: Timer auslesen bzw. gestartet?
Verfasst: 12.02.2016 14:56
von techniker
Das ist richtig.
Bei mir verhält es sich jedoch so, dass der Timer nachtriggert.
Hierdurch starten die 30Sek immer wieder erneut..
Ergebnis: Das 30Sek-Event tritt nie ein.
Re: Timer auslesen bzw. gestartet?
Verfasst: 12.02.2016 15:02
von RSBasic
Kannst du einen kleinen lauffähigen Beispielcode schreiben und posten zum Nachvollziehen deines Problems?
Danke im Voraus.
Re: Timer auslesen bzw. gestartet?
Verfasst: 12.02.2016 15:11
von techniker
Das ist etwas schwierig, da die Ereignisse von extern (RS232) kommen.
Nochmal kurz zusammengefasst als zeitlicher Verlauf:
[RS232-Event] -> Jetzt sollen die 30Sek starten!
[RS232-Event] -> Ignorieren
[RS232-Event] -> Ignorieren
[RS232-Event] -> Ignorieren
[RS232-Event] -> Ignorieren
[RS232-Event] -> Ignorieren
....
[30Sek-Event] -> Jetzt sind 30 Sek vorbei und ich führe die entsprechende Aktion aus.
Wenn ich nun bei jedem [RS232-Event] den Befehl AddWindowTimer aufrufe, startet der Timer immer wieder neu.
D.h. in meinem Fall (es kommen immer wieder mal [RS232-Event] rein), wird der [30Sek-Event] nie aufgerufen.
Ich mache es nun so, dass ich zusätzlich eine Variable definiert habe und prüfe, ob diese gleich 0 ist.
Wenn ja: Timer starten und Variable auf 1.
Im [30Sek-Event] setzte ich dann die Variable zurück und das ganze ist wieder "scharf".
Wäre schöner gewesen, wenn es eine Funktion wie IsTimer oder so geben würde..
Re: Timer auslesen bzw. gestartet?
Verfasst: 12.02.2016 15:15
von RSBasic
Du kannst doch auch so machen:
1. Einmaliges Hinzufügen deines Timers
2. Du fügst bei jedem RS232-Event deine neuen Daten in eine Queue.
3. Im Timer-Eventbereich schaust du, ob es neue Aufträge in der Queue gibt, die du abarbeitest. Wenn nicht, dann ist die Queue leer und wird ignoriert.
Re: Timer auslesen bzw. gestartet?
Verfasst: 12.02.2016 15:37
von techniker
Das verstehe ich nicht.
In diesem Fall habe ich keinen Bezug mehr vom RS232-Event zu den 30Sek.
Über RS232 bekomme ich keine Daten, sondern nur ein "I" für Interrupt.
*JETZT* müssen die 30 Sek starten, bis die Aktion (Messwert erfassen) ausgeführt wird.
Was nützt mir hier eine Queue?
Re: Timer auslesen bzw. gestartet?
Verfasst: 12.02.2016 15:39
von RSBasic
Ah ok und warum entfernst du den alten Timer mit RemoveWindowTimer() nicht einfach?
Dann hast du immer die 30 Sekunden nach einem RS232-Event.
Ansonsten musst du mit einer Variable arbeiten.
Re: Timer auslesen bzw. gestartet?
Verfasst: 12.02.2016 15:43
von techniker
Mache ich ja dann auch.
Mein Problem ist/war, dass ich nicht wusste ob der Timer schon läuft -> Fehlende Funktion IsTimer (oder so).
Bei wiederholtem Aufruf von AddWindowTimer triggert dieser (leider) nach.
Wenn die Funktion wenigstens eine Rückmeldung geben könnte, dass der Timer schon aktiv ist oder so..
Naja - Workarounds bestimmen nun mal das Leben..
