[archimedes] Re: Fragen zum C-Programm Uhrzeit

  • From: "Anton Reiser" <anton-reiser@xxxxxxxxxxx>
  • To: archimedes@xxxxxxxxxxxxx
  • Date: Thu, 05 Jan 2017 13:05:41 +0100

In message <721b92f955.Alex@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
          Alexander Ausserstorfer <bavariasound@xxxxxxxxxxxxxxx> 
wrote:

[flackernde Uhrzeit]

Du kannst das flackern ein gutes Stück reduzieren, wenn Du
     while (newtime - oldtime >= 0)
statt
     while (newtime - oldtime > 0)
verwendest.

Sonst wird das Icon unnötigerweise mindestens zweimal in der Sekunde
gezeichnet.

Ich hab's versucht zu verstehen. Also nachzuvollziehen. Aber an irgend
etwas scheitert es.

Ich verstehe das so: Die eingebaute Laufzeituhr zählt in Stufen von
1/100 Sekunden, d. h. in Abschnitten (Zeitintervallen) von 10
Mikrosekunden weiter.

Nehmen wir z. B. an, new steht bei 100, old bei 0. Das ist der Abstand
von 1 Sekunde.

Dann wird bei while (new - old >= 0) die Berechnung old = old + 100
_zweimal_ durchgeführt (bei (new - old > 0) hingegen nur einmal), so
dass old dann um den Wert 200 erhöht wird, bevor die Schleife verlassen
wird. Für mich heißt das jetzt aber, dass die nächste Aktualisierung des
Symbols dann erst nach 2 Sekunden erfolgt. Das ist aber offensichtlich
nicht der Fall. Denn dann müsste ja bei der Anzeige jeweils 1 Sekunde
übersprungen werden.

Bei wimp_poll_idle() gibtst Du an, wann sich der wimp wieder melden 
soll, also ein Zeitpunkt in der Zukunft.
Ist Jetzt 100, dann ist eine Sekunde weiter in der Zukunft 200.
Genau das, was bei >= 0 rauskommt.

Beim Test > 0 wird zum Zeitpunkt 100 oldtime auch auf 100 gesetzt, 
wimp_poll_idle() mit 100 aufgerufen.
Der Wimp kommt ziemlich schnell wieder zum Zeitpunkt 101 zurück (da 
ist 100 vorbei).
Es hat sich nichts für die Uhrenanzeige geändert, aber erst jetzt wird 
oldtime auf 200 hochgesetzt.

Denk dran, Zeitangabe bei wimp_poll_idle ist ein Wunschwert!

Gibt es vor Deinem Wunschzeitpunkt einen für Dein Programm relevanten 
Event, meldet sich der Wimp vorher.
Bei Deinem Programm typischerweise OpenWindow, PointerEnterWindow, 
PointerLeavingWindow ...
Auch dann wird nach Deinem Code ein Neuzeichnen angestossen, auch wenn 
sich der String nicht geändert hat.
Events, die nicht interessieren, sollten per Poll-Maske ausgeblendet 
werden.

Wird der Wimp durch ein anderes Programm aufgehalten, meldet er sich 
er später. In diesem Fall langweilit, die Uhr bleibt halt stehen und 
macht denn eine Sprung auf die aktuelle Zeit.

Toni

Other related posts: