Hallo zusammen,
ich bin gerade über etwas gestolpert, das ich nicht erwartet hätte:
Um von einer eventuellen Änderung der Zeit unabhängig zu sein (z.B. Sommer-/Winterzeit, oder Zeitkorrektur) messe ich die Zeit über GetTickCount. Ich weiß, dass die Auflösung irgendwo um die 16ms liegt, aber das ist eigentlich kein Problem.
Durch Zufall habe ich bemerkt, dass die über GetTickCount kalkulierte Zeit teilweise größere Abweichungen bekommen. Zuerst dachte ich es sei irgendwo ein Fehler, aber es lässt sich recht leicht nachvollziehen und Fehler sehe ich da keinen:
Delphi-Quellcode:
procedure TForm7.btStartClick(Sender: TObject);
begin
iStart := GetTickCount;
dtStart := now;
tiTest.Enabled := not tiTest.Enabled;
lsDelta.Clear;
end;
procedure TForm7.tiTestTimer(Sender: TObject);
var
dt1, dt2: TDateTime;
begin
dt1 := now;
dt2 := dtStart + (GetTickCount - iStart) / (1000 * 24 * 60 * 60);
lsDelta.Add((dt1-dt2)*24*60*60);
end;
Um das ganze zu visualisieren im Anhang ein Printscreen. Die Kurve hängt auch davon ab, wann man startet. Ich hatte auch mal eine Kurve die ist Sinusförmig rauf und wieder runter, dann aber ziemlich lang um die 10s Abweichung rum gependelt.
Im Chart noch eine zweite Kurve (orange), wo ich die Ticks mit QueryPerformanceCounter erfasst habe.
Über den Timer habe ich alle 1000ms die Abweichung berechnet und im Chart in [s] eingetragen
Hat jemand eine Erklärung?
Und vor allem, wie kann ich die Zeitmessung von Uhrzeit-Veränderungen unabhängig und genau machen?
Verwendet wird Delphi XE und Win7
Grüße
Gerd