| Autor |
Beitrag |
Airtrox
      
Beiträge: 109
Delphi 7
|
Verfasst: 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 Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 17.12.2009 um 23:12
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 17.12.09 23:07
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Gausi
      
Beiträge: 8553
Erhaltene Danke: 479
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 18.12.09 10:39
Airtrox hat folgendes geschrieben : | | 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 
      
Beiträge: 109
Delphi 7
|
Verfasst: 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
|
Verfasst: Sa 19.12.09 00:48
Dann mach mal im Timer Ereignis:
Delphi-Quelltext 1:
| KLabel1.Caption := TimeToString(now); |
Und guck was passiert. Und dann überlege mal, warum das so ist. 
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Sa 19.12.09 00:57
|
|
Airtrox 
      
Beiträge: 109
Delphi 7
|
Verfasst: Sa 19.12.09 01:22
An Luckie:
Ein Fehler passiert  (Undefinierter Bezeichner 'TimeToString')
Mein Ansatz war so:
Delphi-Quelltext 1: 2:
| restzeit := restzeit - 1; label2.Caption := 'Verbleibende Zeit: ' + inttostr(restzeit); |
Wobei restzeit die Sekunden sein sollen.
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 19.12.09 09:17
Airtrox hat folgendes geschrieben : | | 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 
      
Beiträge: 109
Delphi 7
|
Verfasst: 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
|
Verfasst: 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
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Sa 19.12.09 14:44
Airtrox hat folgendes geschrieben : | | 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 
      
Beiträge: 109
Delphi 7
|
Verfasst: 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
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: 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  , und die ist auch unabhängig von all den Weltzeiten
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Sa 19.12.09 17:24
ich schmeiß' einfach mal ein GetTickCount(); in die runde 
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: 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.
|
|