Entwickler-Ecke
Sonstiges (Delphi) - genauenb timer schaffen!
dude - Sa 15.02.03 15:38
Titel: genauenb timer schaffen!
Hi erstmal alle !
Also ich hab folgendes Problem:
Ich will Zeit stoppen und danach die Zeit addieren. Das will ich machen, weil ich einen Timer bauen will, der genau ist! Daher hatte ich die Idee die SystemZeit zu holen, nach einer 'Timer-Sekunde(Interval:1000)' nochmal die Zeit holen und dann die voherige Zeit von dieser abzuziehen!
Fals dies dort oben umständlich geschrieben ist:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| private Zeitholen : Time; Zeitnochmalholen : Time; Zeitfertig : Time; public
procedure Button1.click (sender: TObject) begin Zeitholen := time; end;
procedure Timer1.timer (..) begin Zeitnochmalholen := time; Zeitfertig := Zeitnochmalholen - Zeitholen; Label1.caption := Zeitfertig; end; |
So sieht das in Code aus, wie ich die Zeit berechnen will. Bloss funktioniert dieser Code nicht.
Wäre mir sehr hilfreich wenn mirjemand helfen könnte !
MFG, dude
GruppeCN - So 16.02.03 13:02
Ich glaube das man es so machen könnte:
Quelltext
1: 2: 3:
| const plus = '00:00:01';
var zeit, zwischen: TTime; |
Form1.Create:
Quelltext
1: 2: 3:
| begin zeit := Time; end; |
Dazu zählen:
Quelltext
1: 2: 3: 4: 5:
| procedure Timer1.timer (..) begin zwischen := StrtoTime(plus); zeit := zeit + zwischen; end; |
Du kannst dieses Beispiel Downloaden:
http://www.gruppecn.de/download.php?link=produkte/time/timer.zip
Fred Ferkel - Mo 17.02.03 21:30
hoi hoi
nicht das ichs ganz checke was die frage ist aber so kannst du recht
präzise herausfinden wieviel zeit vergangen ist...
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var x:single;
..button1click... begin x:=gettickcount; end;
..button2click... begin caption:=floattostr(gettickcount-x); //in millisekunden...sollte genau genug sein.. end; |
aber was willste mit dem timer machen??
cya
oink oink
GruppeCN - Di 18.02.03 17:26
Im grunde bringt das alles nichts, denn du zählst die Zeit um eine Sekunde hoch. Und das durch einen Timer(der dir zu ungenau ist) alle 1000 Millisek.. Also ...
Fred Ferkel - Di 18.02.03 23:50
wie stehts damit? :D
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var x:single; i:integer; begin x:=gettickcount; for i:=1 to 10 do begin while (gettickcount-x)<i*1000 do application.ProcessMessages; caption:=inttostr(strtoint(caption)+1); end; end; |
dude - Mi 05.03.03 13:29
wie würdest du es dann machen ?
es soll ja im format hh:mm:ss sein. und es soll jede sekunde
um eins erhöht werden! Und damit man das genau machen kann bietet
sich doch die systemzeit an ! zeit holen, nach ner sekunde zeit holen, zeit voneinander abziehen, ergebnis(00:00:01) mit altem ergebnis addieren!
mars - Mi 05.03.03 13:39
Also wenn es dir nur um eine Sekundenanzeige geht, dann maches einfach mit einem Timer: Bei Button.Click Timer aktivieren (Intervall:=1000) und beim Timer-Ereignis eine globale Variable um eins hochzählen und die Label Anzeige updaten.
Wenn es dir aber um eine genaue Messung einer Zeitdifferenz geht, dann such mal nach QueryPerformanceCounter hier auf dem Forum. Hab mal irgendwo auch ein Codeschnipsel dazu gepostet.
Gruss
Fred Ferkel - Mi 05.03.03 16:16
er will doch nen timer machen der besser ist als der standard-timer...von daher..naja egal aber queryperformancecounter wäre tatsächlich noch besser aber wie genau will man es denn nun eigentlich haben??
dude - Do 06.03.03 20:30
hmpf, also ich hab das nu gelöst:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67:
| unit zeitsuchen;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; Button2: TButton; Timer1: TTimer; Label2: TLabel; Label3: TLabel; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button2Click(Sender: TObject); private procedure zeitholen; procedure zeitholen2; public { Public-Deklarationen } end;
var Form1: TForm1; bolfunc : Boolean = True; a,b,c : TTIme; implementation
{$R *.dfm}
procedure TForm1.zeitholen; begin a := Time; label2.Caption := TimeToStr(a); end;
procedure TForm1.zeitholen2; begin B := Time; C := B - A + StrToTime(label1.Caption)+StrToTime('00:00:01'); label1.Caption := TimeToStr(c); end;
procedure TForm1.Button1Click(Sender: TObject); begin timer1.Enabled := true; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin if bolfunc then zeitholen else zeitholen2; bolfunc := not bolfunc;
end;
procedure TForm1.Button2Click(Sender: TObject); begin timer1.Enabled := false; end;
end. |
so bekomm ich die genaue Zeit, und kann somit einen stinkegenauen timer bauen !
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!