• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Kein Timerstopp in bedingtem Code?

satanklaus

Geomaster
Ich beobachte ein seltsames Verhalten im Zusammenhang mit der Kontrolle von eines Timers:
Ich realisiere einen Countdown mit einem Intervalltimer (bitte darüber jetzt möglichst keine Diskussion). Die Entscheidung, ob er nach Ablauf gestoppt oder neu gestartet werden soll erfolgt in einem if/else Statement. Aber genau das scheint nicht zu funktionieren: zumindest im Simulator läuft der Timer munter weiter.
Ich habe den relevanten Teil mal in einem kleinen Demo extrahiert.

Anhang anzeigen timer_problem.pdf

(mal wieder wg. Uploader: pdf --> urwigo umbenennen)

Ideen, Tipps?
 

Charlenni

Geomaster
Siehe dazu den Thread "Standby und der Timer": Im Ereignis OnTick kann der Timer nicht beendet werden. Bekanntes Problem bei Garmins und beim Emulator. Wie es bei den anderen ist, entzieht sich meiner Kenntnis.
 

jonny65

Geomaster
Oh Intervall vs. Countdown ... wo sind Bier und Chips ? :/

Neu gestartet wird ein Intervalltimer immer, den brauchst nicht extra neu starten.
Gestoppt wird er durch ein "externes" Ereignis (Zone Exit oder Messagebox z.b).
Neu starten muss man nur Countdowns.

2 Möglichkeiten in deinem Fall :
Deine Zählerei anstelle ins onElapse Event ins onStart Event des Timers setzen und den Zähler auf -1 statt auf 0

Oder alles so lassen, nur den Timertyp von Intervall auf Countdown stellen.

Geht beides, wobei Möglichkeit 2 imho die bessere ist und wieder mal für den Countdowntyp spricht, da er "kontrollierbarer" ist. :/
 
OP
satanklaus

satanklaus

Geomaster
Danke, mit der Änderung des Timer-Typs tut es.

Neu gestartet wird ein Intervalltimer immer, den brauchst nicht extra neu starten.
Gestoppt wird er durch ein "externes" Ereignis (Zone Exit oder Messagebox z.b).
Neu starten muss man nur Countdowns.

Ist dieses "Spezialwissen" irgendwo dokumentiert? Weil: plausibel ist es nicht gerade, dass sich die Timer-Typen hinsichtlich Stop und Restart unterschiedlich verhalten. Man bekommt ja auch vom Builder keinen Hinweis, dass irgendwas nicht passt. Warum kann ich z.B. den Intervalltimer nur über ein externes Event stoppen, obwohl der Builder klaglos eine Stop-Aktion dafür akzeptiert?

Oder reden wir hier lediglich von einem Bug im Emulator, obwohl das compilierte gwc funktioniert?
 

Charlenni

Geomaster
Nein, es handelt sich eher um einen Bug in der Wherigo Bibliothek von Emulator und Garmin. Dort wird zuerst das OnTick Ereignis aufgerufen und dann der Timer neu gestartet ohne zu überprüfen, ob der Timer in der Zwischenzeit beendet wurde. Deshalb das seltsame Verhalten. Wird nun im OnTick der Timer beendet, bekommt der Timer dies nicht mit und startet fröhlich durch.

Um es ganz klar auszurücken: ein Intervall-Timer ist ein Countdown-Timer, der nach dem OnTick Ereignis neu gestartet wird. Deshalb wird dort auch nach jedem OnTick das OnStart Ereignis aufgerufen.

Dokumentiert ist das an diversen Stellen. Wie gesagt, einige Threads früher wurde das schon angesprochen.
 
Oben