Einzelnen Beitrag anzeigen

Accipiper

Registriert seit: 18. Jun 2012
5 Beiträge
 
#1

Problem mit GetTickCount für Stoppuhr

  Alt 18. Jun 2012, 11:53
Hallo an alle, kurz vor ab, ich bin noch Anfänger und es kann sein, dass daher manches vielleicht auch etwas banal wirkt, ich bitte euch dass dann zu entschuldigen.

So zu meinem Problem. Ich will eine Stoppuhr programmieren, bei der zwei Zeiten für zwei Teams laufen, die dann unterschiedlich aufhören. Soweit so gut. Ich habe die Funktion GetTickCount verwendet, da mir der Timer zu ungenau war.
Tausendstelsekunden sollte als Genauigkeit ja eigentlich kein Problem darstellen.

Die Sache ist, dass bei mir die Tausendstelstellen nur mit 0, 1, oder 2 beginnen. Und wenn ich bei A bei 00:00:01:162 stoppe, und dann bei B auf stopp drücke steht da: 00:00:01:056. Dass kann ja eigentlich nicht sein, wisst ihr woran es liegen könnte?

Code:
var
  Form1: TForm1;
  a , b , c , tickerA , tickerB : longint;
  h , m , s , ts : byte;
  t : string;

implementation

{$R *.dfm}

procedure TForm1.btn_startClick(Sender: TObject);
begin
   a:=gettickcount();
   timerA.Enabled := true;
   timerB.Enabled := true;
end;

procedure TForm1.timerATimer(Sender: TObject);
begin
   tickerA := tickerA + 1;
   b := gettickcount();
   ts := (b-a) mod 1000;
   s := ((b-a) div 1000) mod 60;
   m := ((b-a) div 60000) mod 60;
   h := ((b-a) div 3600000) mod 24;
   t := Format('%2.2d:%2.2d:%2.2d:%2.3d', [h, m, s, ts]);
   lbl_timeA.caption:=t;
end;

procedure TForm1.timerBTimer(Sender: TObject);
begin
   tickerB := tickerB + 1;
   c := gettickcount();
   ts := (c-a) mod 1000;
   s := ((c-a) div 1000) mod 60;
   m := ((c-a) div 60000) mod 60;
   h := ((c-a) div 3600000) mod 24;
   t := Format('%2.2d:%2.2d:%2.2d:%2.3d', [h, m, s, ts]);
   lbl_timeB.caption:=t;
end;

procedure TForm1.btn_stopAClick(Sender: TObject);
begin
   timerA.Enabled := false;
end;

procedure TForm1.btn_stopBClick(Sender: TObject);
begin
    timerB.Enabled := false;
end;

procedure TForm1.btn_resetClick(Sender: TObject);
begin
   lbl_timeA.Caption := 'Zeit Team A';
   lbl_timeB.Caption := 'Zeit Team B';
end;

procedure TForm1.btn_continueAClick(Sender: TObject);
begin
    timerA.Enabled := true;
end;

procedure TForm1.btn_continueBClick(Sender: TObject);
begin
     timerB.Enabled := true;
end;

end.
Den Timer hab ich nur zur Aktualisierung des Labels einsetzen wollen, da mir das am einfachsten erschien, und die Uhr ja laufen soll (soll halt sichtbar sein).


Ich freue mich schon auf eure Hilfe, bin nämlich gerade ein bisschen verzweifelt. Danke schon mal im Voraus.
  Mit Zitat antworten Zitat