Re: Timerüberlauf Kategorie: Programmierung (von Detlef - 29.06.2009 20:48) | ||
Als Antwort auf Re: Timerüberlauf von reneforster - 29.06.2009 19:45 | ||
| ||
> > Hallo, > > ich habe mal eine Frage zur Timervariable. > > > > Die Systemtimervariable ist vom Typ long und wird ca. alle 24 Tage überlaufen. Die Frage ist, wie geht > > man mit dieser Variable nun um? Ich habe beispielsweise zyklische �berwachungen programmiert, > > wo sich ein Proze� solange schlafen legt, bis system.timer() + X überschritten ist. Funktioniert auch > > prima, gehe aber nun davon aus, da� in einem ünglücklichen Moment das Ganze auch mal > > nach hinten losgehen kann. > > Wie kann man diese Variable überhaupt sicher verwenden? > > Kann man diese evtl. auch wieder zurücksetzen? > Zurück setzen / verändern geht da nicht. > > Ich habe einen ähnlichen Anwendungsfall wie Du. Bei mir ist es eine Spannungsfrei Schaltung für > Rolladenmotore. > > Ich habe eine zweite Variable (eigener Timer) genommen, welche im Sekundentakt hochgezählt wird. > Diese benutze ich das als eigene Timer Variable. Um hier jetzt einen �berlauf zu verhindern, wird die > eigene Timervariable immer um 4.00 Uhr zurückgesetzt. Die Wahrscheinlichkeit, das früh um 4.00 Uhr > Rolläden bedient werden, ist bei mir unwahrscheinlich. Aber man könnte auch hier noch entgegen > wirken, und den Rolladen Thread einfach um 4.00 aussetzen. > > Ob diese Lösung bei Dir anwendbar ist, weis ich nicht. Vielleicht hilfst irgendwie als Lösungsansatz. > > > Rene Hallo Rene vielen Dank für die Antwort. inst ja mal interessant, ein Anwendungsfall des Threads mit dem Timer ist tatsächlich auch die Jalantriebe wieder spannungsfrei zu schalten... Habe jetzt erstmal folgenden Lösungsansatz gewählt, frage mich aber, ob das nicht auch eleganter geht. if (Aktzeit[a] <= system.timer() and Aktzeit[a]-360000000 < Aktzeit[a]) or (((Aktzeit[a]-360000000) > system.timer()) and Aktzeit[a] > 360000000) Aktzeit[a] wird durch andere Funktionsteile gesetzt, und ist system.timer() + eine Wartezeit X. Normalerweise reicht ja der Vergleich Aktzeit[a] <= system.timer() um ein Ereignis auszulösen, aber wegen des Zählerumlaufs habe ich das um Aktzeit[a]-360000000 < Aktzeit[a] erweitert. Dieser Ausdruck bleibt nämich negativ, wenn Aktzeit[a] umgelaufen ist. Au�erdem wir sofort ausgelöst, wenn Aktzeit[a] - 100 Stunden immernoch grö�er ist als system.timer() obwohl Aktzeit[a] schon grö�er ist als 100 Stunden. dann ist nämlich system.timer() umgelaufen, und das Ereignis mu� sofort ausgelöst werden. Viele Grü�e Detlef | ||
Antwort schreiben Antworten: Re: Timerüberlauf (von nitram - 30.06.2009 7:10) Re: Timerüberlauf (von Detlef - 30.06.2009 9:54) Re: Timerüberlauf (von Detlef - 30.06.2009 11:24) Re: Timerüberlauf (von Detlef - 30.06.2009 8:12) Re: Timerüberlauf (von Detlef - 30.06.2009 8:36) Re: Timerüberlauf (von nitram - 30.06.2009 8:30) Re: Timerüberlauf (von reneforster - 30.06.2009 15:01) Re: Timerüberlauf (von nitram - 30.06.2009 21:16) Re: Timerüberlauf (von Detlef - 30.06.2009 9:21) Re: Timerüberlauf (von Detlef - 30.06.2009 8:45) |