Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#4

AW: GetTickCount beeinflusst von PC Auslastung

  Alt 4. Jun 2015, 19:39
Also die Zeit zu messen in dem man im Timer OnTimer Ereignis die Zeit, bzw. Ticks addiert ist leider ein unsinniges Unterfangen. Das Intervall ist nicht gleichmäßig. Stellt man das Intervall auf 100 ms, kann, wird aber eher nicht, das Ereignis 10 mal in der Sekunde aufgerufen werden. Somit bringt das nichts.

Besser ist den Zeitunterschied zu messen, z. B. so:
Delphi-Quellcode:
uses
  DateUtils;

var
  T1, T2: TTime;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval := 1;
  Timer1.Enabled := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  T1 := 0;
  T2 := 0;

  Timer1.Enabled := True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  MSBetween: Int64;
  TimeTemp: TTime;
begin
  if T1 = 0 then
    T1 := Time;

  T2 := Time;
  MSBetween := MilliSecondsBetween(T1, T2);
  TimeTemp := MSBetween / 24 / 60 / 60 / 1000;
  Label1.Caption := FormatDateTime('hh:nn:ss:zzz', TimeTemp);
end;
Beim Start wird die aktuelle Uhrzeit gemessen. Danach wird immer die Differenz zu der Startzeit gemessen. Da die Uhrzeit separat getaktet wird, sollte PC Auslastung keine Rolle spielen.

//EDIT:

Ich hab mir das Ganze mal angeguckt und da sind einige unnötige Zeilen. Der Code oben nur etwas kürzer:
Delphi-Quellcode:
uses
  DateUtils;

var
  T1: TTime;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval := 1;
  Timer1.Enabled := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  T1 := 0;
  Timer1.Enabled := True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  TimeTemp: TTime;
begin
  if T1 = 0 then
    T1 := Time;

  TimeTemp := MilliSecondsBetween(T1, Time) / 24 / 60 / 60 / 1000;
  Label1.Caption := FormatDateTime('hh:nn:ss:zzz', TimeTemp);
end;

Geändert von Popov ( 4. Jun 2015 um 21:51 Uhr)
  Mit Zitat antworten Zitat