Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TTimer nicht besonders genau?


bkgmjo - Di 15.12.09 19:37
Titel: TTimer nicht besonders genau?
Hallo,
ich habe gerade eine Entdeckung gemacht, die mich etwas irritiert.
Ich habe:
- eine TTimer Komponente mit dem Intervall 1000
- Einen Button, der den Timer startet und die Startzeit in einer TTime Variable speichert
- Eine Variable, die sich bei jedem Timercall um 1 erhöht, also einen Sekundenzähler
- Eine Funktion, die diese Sekundenvariable in eine TTime Variable umwandelt => sekunden * (1/24/60/60)
- 2 Labels, die die vergangene Zeit anzeigen sollen und jede Sekunde aktualisiert werden
- Das erste Label wird über Now - Startzeit berechnet
- Das zweite Label über die besagte Funktion

Dabei sollte für mich bei beiden Anzeigen immer der gleiche Wert stehen, allerdings springt das erste Label ca. alle 1 min 20 s um eine Sekunde nach vorn, hat also nach etwas über einer Stunde schon einen Unterschied von ca. einer Minute?!

Ich hätte mir das jetzt auf einem ausgelasteten Rechner vielleicht erklären können, aber dem ist auf keinen Falls so. Ich benutze Delphi 7 + Windows 7 64bit auf einem PhenomII 955 X4 PC. Konnte leider nicht testen, ob andere Systeme ein ähnliches Vehalten zeigen. Was stimmt hier nicht?


Boldar - Di 15.12.09 19:40

Timer sind dafür nun einmal nicht gemacht. Punkt.
Einen Countdown oder sowas musst du über nen Timer machen, worin du gettickcount (oder queryperformancecounter) aufrufst und mit der Startzeit vergleichst.


bkgmjo - Di 15.12.09 19:42

Also darf ich annehmen, dass der Intervall nur ein Näherungswert ist?


Boldar - Di 15.12.09 19:44

Ja.
Allein schon über die Kommunikation via messages weicht das ab, ausserdem liegt der kleinst mögliche Intervall auch nicht bei 1ms, sondern etwa bei 40ms.


bkgmjo - Di 15.12.09 19:47

Okay, hatte gedacht, Probleme gibt es nur bei kleinen Intervallen. Trotzdem Danke für die Info.


Boldar - Di 15.12.09 19:49

Wenn du einen genauen und schnellen Timer brauchst, kannst du z.B. Application.Onidle nehmen (Da gibs bestimmt was in der Suche)


bkgmjo - Di 15.12.09 19:53

War nur Spielerei für meine Freundin, die jetzt nen Informatikkurs an der Schule hat. Also nichts dramatisches. Hatte nur vermutet, es liegt im Quad Core oder der 64 Bit Version von 7, die mir ja fleissig Kompatiblitätswarnungen ausspuckt. Wenns mal wichtig wird, nerv ich hier wieder, wenn die Suche nicht hilft ;-)