Einzelnen Beitrag anzeigen

norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#1

Große Abweichung zwischen Now und GetTickCount

  Alt 2. Mai 2020, 22:31
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
Miniaturansicht angehängter Grafiken
timegettickcount.jpg  

Geändert von norwegen60 ( 2. Mai 2020 um 22:36 Uhr)
  Mit Zitat antworten Zitat