Re: system.timer() Kategorie: Programmierung (von Detlef, http://www.juerrens.de - 5.01.2011 17:08) | ||
Als Antwort auf Re: system.timer() von Wurl - 5.01.2011 10:48 | ||
| ||
> [..] > > Besser ist es, dies so zu berechnen: > > system.timer()-timer<=10000 > > > > Hier wird die Differenz gebildet. Zu beachten ist aber, da� immer vom "höheren" Wert > > der "kleinere" abgezogen wird. (Oder anders ausgedrückt: Vom aktuelleren (Timer-)Wert mu� > > immer der alte Wert abgezogen werden.) > > Nur so ist die Differenz immer positiv. > [..] > > Das gefällt mir gut. > Da kann man auch noch eine kleine Performance-Verbesserung einbauen, > mit einem 'yield' beim Warten bekommen andere Threads mehr Prozessorzeit zugewiesen: > > > thread Ueberwachung > { > long systimer_alt; > long systimer_neu; > long systimer_delta; > long wart; > run xxxx; // hier die ggf. hohe Prio fuer den Thread festlegen > do //Warteschleife: > { > yield; //mehr Zeit fuer andere Threads > //es koennte vielleicht auch ein 'sleep(1)' funktionieren... > // - einfach mal probieren - > systimer_neu = system.timer(); > systimer_delta = (systimer_neu - systimer_alt); > } > while (systimer_delta < wart) or (Aktflag); > systimer_alt = systimer_neu; //Timer-Vergleichswert für nächste Runde speichern > { > //Hier der Code, der das neue 'wart' als Relativzeit bestimmt. > //Da mehrere Timer Ueberwacht werden, > // die verbleibenden Zeiten jeweils um 'systimer_delta' reduzieren > // und dann auf <=0 vergleichen. (wie im ersten Codebeispiel) > } > } //end of thread Ueberwachung > > Hallo Zusammen, ja, danke für die Antworten: zu den Fehlfunktionen: wenn sie auftauchen, dann nicht nur kurzzeitig, sondern dauerhaft. Erst ist es eine ungewöhnliche Reaktion, die sich selbst heilt ( dann nicht mehr Auftritt) und irgendwann später (ungefähr die 7 Wochen) gibt es dann permanente Fehlfunktionen. Immer das gleiche Spiel, immer etwas anders, je nachdem welche Funktion als erstes nach dem Timerumlauf gerade abgewickelt werden sollte... Deshalb glaube ich schon, da� es ein Problem mit der Speicherung des long Wertes ist. Der Vorschlag, nur die Differenzzeit zu speichern, scheint die Lösung zu sein. Damit lie�e sich ja auch die Regel "vom aktuellen Timerwert den Alten abziehen" umsetzen, in dem man das Ergebnis mit der Differenzzeit vergleicht. Zum Thema Long Variable: da hatte ich in der Vergangenheit schonmal ein Problem: Ich wollte einen Timestamp in einer Longvariable abspeichern: MMTTSSMMSS(Monat,Tag,Stunde,Minute,Sekunde) mü�te in long passen (2147483647) ging aber nicht, machte ständig �berlauf und undefinierte negative Werte! Das gleiche Problem vermute ich hier auch... Ich werde mich am WE mal dazu melden und Ergebnisse verkünden... Bis dahin, Detlef Meine Seite: http://www.juerrens.de | ||
Antwort schreiben Antworten: |