normalerweise misst man, wie viel Zeit seit dem letzten Frame vergangen ist. Und diese gemessene Zeit geht dann in die Berechnung ein. Die Darstellung ist dann nur wenig davon abhängig, wie schnell der PC rechnen kann.
Nicht nur wie schnell der PC ist ... auch TTimer wird niemals die gewollte Auflösung von 1ms hinbekommen
und da nebenbei auch noch andere Programme und das eigene Programm die Ausführng des Timerevents verzägern können, wird es je nach CPU-Auslastung noch "schlimmer".
Einfach mal ausprobieren und sich freuen, wie schon ohne viel Code der Timer (Count links) der echten Zeit (rechts) hinterherläuft.
Delphi-Quellcode:
var
Count, Start: Cardinal;
procedure TForm3.FormCreate(Sender: TObject);
begin
Start := GetTickCount;
end;
procedure TForm3.Timer1Timer(Sender: TObject);
begin
Inc(Count);
Caption := Format('%d %d', [Count, GetTickCount - Start]);
end;
bzw. (z.B. für FMX)
Delphi-Quellcode:
var
Count: Cardinal;
Start: TDateTime;
procedure TForm3.FormCreate(Sender: TObject);
begin
Start := Now;
end;
procedure TForm3.Timer1Timer(Sender: TObject);
begin
Inc(Count);
Caption := Format('%.0n %.0n', [Count/1, MilliSecondSpan(Now, Start)]);
end;
PS: Wert2 durch Wert1 = das, was dein PC gerade jetzt für ein Timer1.Interval "wirklich" hinbekommt.