Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - zeitverschiebung


PatrickSteiner - Do 15.12.05 12:17
Titel: zeitverschiebung
Hallo zusammen

Ich verwende die Timerkomponente. Ich zähle mit dieser eine Zeit von 6 Minuten runter auf 0 im Sekundentakt.
Das Programm läuft wie es soll. Leider, je nach dem was für ein Rechner man benutzt, stimmt die Zeit am Ende um ca. 15 Sekunden nicht.
Die Systemzeit auf dem PC auf welchem sich der Fehler zeigt läuft korrekt und genau.
Hat jemand dafür eine Erklärung und wie man das umgehen kann.
Vielen Dank für eure Hilfe.


Moderiert von user profile iconraziel: Topic aus VCL (Visual Component Library) verschoben am Do 15.12.2005 um 14:30


Narses - Do 15.12.05 12:23

Moin!

Das ist beim eventbasierten Windows System-Timer normal, und das wird durch den Sekundentakt (Vermutung: Timer erzeugt im Sekundentakt Ereignisse, und diese zählst du bis 60 rauf) noch verstärkt -> deshalb die PC-Abhängigkeit.

cu
Narses


Lossy eX - Do 15.12.05 13:14

Also du solltest nicht im Timer herunterzählen. Ich denke es wäre besser, wenn du in dem Timer mittels GetTickCount abfragst wie viel Zeit vergangen ist. Ein Intervall von 1000 sollte ausreichen um genau genug zu sein und lang genug zu sein um von der CPU-Leistung her nicht auf zufallen. Evtl kannst du den Intervall auch 2 Sekunden vor dem Ende noch ein wenig kleiner Stellen um noch genauer an die 6 Min zu kommen. GetTickCount ist aber auch nicht sehr genau. Dabei liegen die Abweichungen aber im Millisekundenbereich.


Wollaston - Do 15.12.05 13:15

Hallo,

ich hatte auch mal dieses Problem. Beim start des Timers musst Du die aktuelle Zeit speichern. In der Unit DateUtils (glaube ich, hab gerade kein Delphi zur Hand) gibt es Funktionen die feste Zeitintervalle zurückliefern (z.Bsp.: OneSecond, OneMinute, ...).

Diesen Wert addierst Du einfach auf die aktuelle Zeit und fragst im OnTimer-Event ab ob diese Zeit erreicht oder überschritten ist. Dafür reicht es eigentlich aus den TimerIntervall auf 500 oder 1000 zu stellen.

Mfg Wollaston