Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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
Ich nutze:
C-Control II Station
> [..]
> > 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: