Timer - verbleibende Zeit anzeigen
-
Irgendwo wird eine Variable vom Typ TDateTime und eine get-Funktion deklariert:
TDateTime TimerActivatedTime; double getTime();
Irgendwo wird der selbstverwaltete Timer aktiviert:
Timer->Enabled = true; TimerActivatedTime = Time();
Jetzt kann man eine Funktion aufrufen, die mir die bereits verstrichene Zeit zurückgibt.
Diese Funktion könnte z.B. so aussehen:double MeineSchoeneKlasse::getTime() { return Time() - TimerActivatedTime; }
Oder habe ich jetzt irgendwas grundsätzlich falsch verstanden?
Gruß,
Alexander
-
Also ich denke Joe_K will so eine Art Contdown anzeigen. Und dafür ist junix Vorschlag schon der sinnvollste. Man könnte die Ausgabe natürlich auch in Application->OnIdle durchführen. Nur von der Verwendung von 2 Timern würde ich abraten. So weit ich weiß, stehen Timer unter Windwos nur in begrenzter Anzahl zur Verfügung, deswegen sollte man die Anzahl der Timer auf ein Minimum beschränken.
Aber vielleicht sollte Joe_K auch einfach noch mal was dazu posten...
-
Das funktioniert zwar grundsätzlich, trotzdem ist die von junix vorgeschlagene Variante deutlich eleganter und sicherer.
Eleganter, weil (für eine kontinuierliche Anzeige) nicht ständig die Systemzeit abgerufen werden muss. Sicherer, weil sich die Systemzeit während des Timerlaufes ja ändern könnte.Ihr habt Glück, dass die Suchfunktion deaktiviert ist!
Das Thema wurde mindestens einmal schon sehr ausführlich diskutiert.
-
Joe_M. schrieb:
Also ich denke Joe_K will so eine Art Contdown anzeigen. Und dafür ist junix Vorschlag schon der sinnvollste.
Da habe ich wohl was überlesen.
Gruß,
Alexander
-
Alexander Kempf schrieb:
Da habe ich wohl was überlesen.
Hast Du nicht.
Es geht nicht direkt aus dem Posting hervor, aber ich vermute es...
-
Hallo Jansen!
Sicherer, weil sich die Systemzeit während des Timerlaufes ja ändern könnte.
Würde ich aber eher andersrum betrachten: Wenn die Systemzeit geändert wird (weil der Benutzer merkt, dass die gar nicht stimmt), wird trotzdem weiter gezählt.
Bei junix's Lösung interessiert es der Software nicht die Bohne, wenn die Zeit umgestellt wird. (Und die Zeit stellt man ja nicht einfach so um, wenn dann möchte man dafür auch die entsprechenden Resultate haben...)Und wegen des Zugriffes auf die Systemzeit: Nunja - da bin ich mir nicht sicher und ich denke, dass das auch darauf ankommt, ob das nun ein Countdown werden soll, oder einfach irgendwann nur ne Abfrage.
Was ist denn "aufwändiger" ? Das Abfragen der Systemzeit zu einem Zeitpunkt, oder alle Sekunden das Timer-Ereignis auszulösen und nen int zu erhöhen.
Also ich glaube doch eher das Zweite...tschüss
Robert
-
rowisoft schrieb:
Bei junix's Lösung interessiert es der Software nicht die Bohne, wenn die Zeit umgestellt wird.
Ähh ja, genau das habe ich doch gesagt!? Sicherer halt, mit anderen Worten zuverlässiger.
Du startest einen Task, der 15 Minuten dauern soll (Pizza im Ofen) und du möchtest jederzeit wissen, wielange es noch dauert, bis die 15 Minuten um sind.
Was die Systemzeit des Rechners sagt kann (und sollte) dir dabei völlig schnuppe sein. Wenn du nämlich feststellst, dass dein Rechner 5 Minuten vorging, du die Zeit zurückstellst und anschliessend weiterhin mit 15min - (Time() - StartZeit) prüfst, wielange es noch dauert, dann dürfte die Pizza am Ende recht dunkle Farbtöne angenommen haben.
Oder aber der Erinnerungs-Alarm geht los (weil die 15 Minuten Realzeit um sind und der Timer ausgelöst hat), und das obwohl dir die Anzeige gerade "noch 5 Minuten" signalisiert hat.
-
Aber wir sind uns unterm Strich also alle einig, dass junix Vorschlag der einfachste, eleganteste, sicherste und somit sinnvollste Weg ist? Warum diskutieren wir dann eigentlich noch?
-
Hallo!
Du startest einen Task, der 15 Minuten dauern soll (Pizza im Ofen) und du möchtest jederzeit wissen, wielange es noch dauert, bis die 15 Minuten um sind.
Achso meinst du
Ich habe das von dieser Seite aus betrachtet:
Countdown bis zum neuen Jahr sinds noch XXX Minuten
oder
Bis zu meinem Geburtstag sinds noch XXX Minuten...tschüss
Robert
-
rowisoft schrieb:
Ich habe das von dieser Seite aus betrachtet:
Bis zu meinem Geburtstag sinds noch XXX Minuten
Wo ist da der Unterschied? Du stellst plötzlich fest, dass auf dem Rechner der falsche Monat eingestellt ist. Du korrigierst das und auf einmal sagt dein Programm, das eben noch behauptete, es wären noch 25 Tage, dass es plötzlich noch 340 Tage dauern soll.
Du hast deinen eigenen Geburtstag verpennt, weil du dich auf die Systemzeit des Rechners verlassen hast.Davon abgesehen passt deine Betrachtungsweise bzw. dein Beispiel auch nicht wirklich zur Problemstellung des ursprünglichen Beitrages, oder?
-
Na ja, irgenwie wird hier von verschiedenen Dingen gesprochen, einmal geht es um einen Intervall (Pizza), zum anderen um einen Zeitpunkt (Geburtstag). Ersteres ist wohl defintiv geklärt. Zweiteres ist so dann wohl nicht lösbar. Reicht ja schon sich beim korrigieren des Datums zu verklicken... Der Systemzeit auf dem Rechner darf man so gesehen gar nicht trauen. Da muß man dann schon Zeitserver aus dem Internet bemühen.