![]() |
Delphi Stopuhr
Liste der Anhänge anzeigen (Anzahl: 1)
hi,
ich habe heute schnell eine Stopuhr gemacht. ich hoffe ihr könnt euch das mal angucken und mir sagen ob die so "genau" ist oder ob die völlig falsch läuft. danke schon mal. bye Fredyy |
Re: Delphi Stopuhr
Bei mir (WinXP Home SP2) läuft sie eindeutig zu langsam.
Nachtrag: Timer mit Intervall 1, lustig, aber schwachsinnig. WIndows XP schafft max. 10 ms, Win9x 50 ms, daran liegt es, dass deine Stoppuhr zu langsam ist, stelle das Intervall auf 50 ms, überprüfe entsprechend und die Stoppuhr ist deutlich genauer. Oder schau dir mal ![]() |
Re: Delphi Stopuhr
Hab ebenfalls XP mit SP1 und die Uhr ist ja verdammt langsam!!! Wie hast du Sie eigentlich programmiert?! Hoffe nicht mit einem Timer!
|
Re: Delphi Stopuhr
Zitat:
|
Re: Delphi Stopuhr
Zitat:
|
Re: Delphi Stopuhr
Zitat:
|
Re: Delphi Stopuhr
Es würde auch ein DXTimer als Alternative zum TTimer reichen. Es gab schon einige Diskussionen darüber. Kurze Zusammenfassung:
Ein Timer (z.B. TTimer) ist ein Thread. Threads laufen immer parallel nebeneinander, statt nacheinander. Wenn man jetzt einen Thread erstellt, der eine geringere Priorität hat, wird er in größeren Abständen aufgerufen als ein Thread mit hoher Priorität (logisch). Und da liegt der Unterschied: Der TTimer hat eine zu niedrige Priorität, um auf 1ms zu laufen (jedenfalls auf aktuellen Systemen). Dafür verbrauchen aber auch schnellere Timer (z.B. DXTimer) mehr CPU-Auslastung ;) Das sollte imho als Erklärung reichen (wenn ich irgendwo falsch liegen sollte, bitte melden). Das heißt: Es würde also eigentlich schon reichen, wenn du den Timer durch den DXTimer ersetzt (oder durch eine andere, beliebige Timer-Unit, von denen es mittlerweile einige gibt) ;) |
Re: Delphi Stopuhr
Warum "merkst" Du Dir nicht einfach die Startzeit (Systemzeit beim Start der Stopuhr) und erechnest Dir onTimer die Differenz zur aktuellen Zeit? Bei einem entspr. kurzem Interval läuft die Uhr dann absolut genau (zumindest so genau wie Deine Systemuhr ;) ) und schnell, egal ob der Timer mal schneller oder mal langsamer läuft...
|
Re: Delphi Stopuhr
wie kann ich die startzeit raus bekommen?
danke schon mal für eure antworten... |
Re: Delphi Stopuhr
Delphi-Quellcode:
Also sowas in der Art:
start:=GetTickCount;
Delphi-Quellcode:
interface
//... var start: Cardinal=0; //... implementation //... procedure Button1Click(Sender: TObject); begin if start=0 then begin start:=GetTickCount; Button1.caption:='Stopp'; label1.caption:=''; end else begin Button1.Caption:='Start'; start:=0; label1.caption:=inttostr(round((GetTickCount-start)/1000)))+' Sekunden verstrichen.'; end; end; //... end. |
Re: Delphi Stopuhr
Delphi-Quellcode:
Diese zwei Anweisungen würde ich noch vertauschen :wink: .
start:=0;
label1.caption:=inttostr(round((GetTickCount-start)/1000)))+' Sekunden verstrichen.'; Für maximale Genauigkeit solltest du dennoch dem Link weiter oben folgen. |
Re: Delphi Stopuhr
Autsch, da hat er recht. :wall:
Ansonsten dürfte es aber stimmen. Ich progge schon seit einer Woche fast durch, also vergebt mir das. :mrgreen: |
Re: Delphi Stopuhr
danke für die ganze hilfe...
jetzt habe ihc ein neues problem. ich mache die sek,min,std einteilung indem ich den wert von sek wenn er 60 ist auf 0 zurücksetzen und min um 1 erhöhe. jetzt baue ich gerade eine schleife (die dann im timer ausgeführt wird). nur irgend wie funktioniert sie nicht.
Delphi-Quellcode:
danke nochmals.
zeit := round((GetTickCount-start)/1000);
While i <= zeit do begin LbSek.Caption := inttostr(strtoint(LbSek.Caption) + 1); Inc(i); end; bye fredyy |
Re: Delphi Stopuhr
Was ist I überhaupt? Mit Std, Min, Sek würde ich das machen:
Delphi-Quellcode:
[edit=alcaeus]delphi-Tags korrigiert. Mfg, alcaeus[/edit]
procedure timer1timer(Sender: TObject); //Hat Interval 100, nicht enabled.
begin zeit:=trunc((GetTickCount-start)/1000); h:=trunc(zeit/3600); min:=trunc((zeit mod h)/60); s:=zeit mod min; label1.caption:=inttostr(h)+' : '+inttostr(min)+' : '+inttostr(s); end; procedure Button1Click(Sender: TObject); begin if start=0 then begin button1.caption:='Stop'; start:=GetTickCount; timer1.enabled:=True; end else begin timer1.enabled:=False; timer1timer(Sender); start:=0; end; end; end; |
Re: Delphi Stopuhr
da gibt es noch einen fehler...
Delphi-Quellcode:
beide zeilen mit mod geben am anfang devision by zero aus,
min:=trunc((zeit mod h)/60);
s:=zeit mod min; da die uhr ja beim starten noch keine minuter oder stunde gelaufen ist. wie kann ich das abfangen? EDIT: Problem selber behoen mit 2 unschönen aber funzenden Abfragen.
Delphi-Quellcode:
zeit:=trunc((GetTickCount-start)/1000);
h:=trunc(zeit/3600); if (H > 0) then min1 := (zeit mod h) else min1 := zeit; min:=trunc(min1/60); if (min > 0) then s:=zeit mod min else s := zeit; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz