Autor Beitrag
Airtrox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: Do 17.12.09 22:47 
Ich habe nochmal eine Frage zu dem Timer:
wenn ich den Wert von Timer.Intervall auslese und durch 1000 Teile, bekomme ich 1634373 als Ergebnis, obwohl Intervall auf 4000 gesetzt wurde.

Wie aber kann man, bei einem gestarteten Timer, die Zeit bis zum Ereigniss OnTimer messen?


Liebe Grüße


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 17.12.2009 um 23:12
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 17.12.09 23:07 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8553
Erhaltene Danke: 479

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 18.12.09 10:39 
user profile iconAirtrox hat folgendes geschrieben Zum zitierten Posting springen:
Wie aber kann man, bei einem gestarteten Timer, die Zeit bis zum Ereigniss OnTimer messen?

Klare Antwort: Gar nicht.

Wenn du eine Art Countdown mit Anzeige machen willst, dann muss du das Timer-Intervall kurz setzen (z.B. 250 ms für eine Countdown-Anzeige im Sekundentakt, die auch ungefähr danach aussieht). Im Ontimer-Event muss du dann die aktuelle zeit mit der "Zielzeit" vergleichen und dementsprechend die Anzeige ändern. Ist die Zielzeit erreicht, deaktivierst du den Timer und startest die gewünschte Aktion.

_________________
We are, we were and will not be.
Airtrox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: Sa 19.12.09 00:34 
Ein Countdown wäre natürlich auch ganz praktisch, jedoch geht es mit in erster Linie darum:
Der Timerstand muss jederzeit abrufbar sein, da er (im Falle dass das Programm geschlossen wird) der Timerwert gespeichert werden kann.

Wieso hast du das Intervall so niedrig genommen und nicht 1000, soviel entspricht doch einer Sekunde. Ich kann mir kaum vorstellen, wie man mit dem Intervall 250 einen Countdown richtig hin bekommt.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 19.12.09 00:48 
Dann mach mal im Timer Ereignis:
ausblenden Delphi-Quelltext
1:
KLabel1.Caption := TimeToString(now);					

Und guck was passiert. Und dann überlege mal, warum das so ist. ;)
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Sa 19.12.09 00:57 
Dazu als Hintergrundinformation:

www.delphi-forum.de/viewtopic.php?t=96560
Airtrox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: Sa 19.12.09 01:22 
An Luckie:
Ein Fehler passiert :D (Undefinierter Bezeichner 'TimeToString')

Mein Ansatz war so:
ausblenden Delphi-Quelltext
1:
2:
  restzeit := restzeit -  1;
  label2.Caption := 'Verbleibende Zeit: ' + inttostr(restzeit);

Wobei restzeit die Sekunden sein sollen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19336
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 19.12.09 09:17 
user profile iconAirtrox hat folgendes geschrieben Zum zitierten Posting springen:
Mein Ansatz war so:
Besser wäre es, wenn du die Zielzeit als Referenz nimmst wie dir bereits weiter oben geraten wurde. Denn ansonsten ist das reine Zählen der Timerereignisse sehr ungenau. Wenn das in Ordnung ist, dann wird es so auch funktionieren wie du es hast.
Airtrox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: Sa 19.12.09 13:21 
Ich steh ein bischen auf dem Schlauch. Wieso soll der Timer Intervall auf 250 gesetzt werden? Ich hab verstanden, dass der Timer ungenau ist, aber was würde das für einen Unterschied machen ob ich jede 250ms 1/4 abziehe oder jede sek 1 abziehe?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 19.12.09 14:23 
Der Timer zeigt alle 250 ms die zeit an, die zeit ändert sich aber nur alle Sekunde. Wenn es jetzt bei 250 ms zu Ungenauigkeiten kommt, wirkt sich das in der anzeige nicht so stark aus.
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Sa 19.12.09 14:44 
user profile iconAirtrox hat folgendes geschrieben Zum zitierten Posting springen:
Ich steh ein bischen auf dem Schlauch. Wieso soll der Timer Intervall auf 250 gesetzt werden? Ich hab verstanden, dass der Timer ungenau ist, aber was würde das für einen Unterschied machen ob ich jede 250ms 1/4 abziehe oder jede sek 1 abziehe?


Du sollst halt nichts abziehen, sondern die Systemzeit nehmen.
Airtrox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: Sa 19.12.09 15:18 
Ich hab mich bisher noch nicht mit der Systemzeit auseinander gesetzt, aber ist es dann nicht möglich das Timer Ergebnis zu verfälschen, wenn man die Windows Zeit ändert?
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Sa 19.12.09 15:56 
Nein, der Timer hatt nichts mit der Uhrzeit oder Systemzeit zu tuen!
Im weitesten Sinne ist es lediglich ein Counter mehr nicht!
oder einfach nur ne Stopuhr :D , und die ist auch unabhängig von all den Weltzeiten :lol:
Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Sa 19.12.09 17:24 
ich schmeiß' einfach mal ein GetTickCount(); in die runde ;)
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Sa 19.12.09 18:48 
Airtrox, du sollst ja auch nicht den Timer zur Zeitmessung benutzen, sondern die Systemzeit.
also den Timer auf 250ms einstellen, und darin nicht eine Variable abfragen, sondern mit Gettickcount oder Queryperformancecounter die "Systemzeit" abfragen.