Re: Immer wiederkehrende Aufgaben realisieren
Kann ich ohne genaue Infos nicht sagen. Tendentiell macht aber das bisschen Rechnen gar nichts. Die paar Takte sind vernachlässigbar.
mfg Christian |
Re: Immer wiederkehrende Aufgaben realisieren
Zitat:
Zitat:
Zitat:
Startet die TTimer - Komponente den Interval neu, wenn ich Sie deaktiviere und dann wieder aktiviere ? Ich bin bis jetzt zumindest davon ausgegangen. |
Re: Immer wiederkehrende Aufgaben realisieren
Zitat:
Wie brauchst Du denn den Timer: Immer zur vollen Stunde oder immer zur vollen Minute oder immer nach Abschluß eines Vorganges eine bestimmte Zeitdifferenz.
Eventuell kommst Du ja damit an Deinem Problem "vorbei": Ein paar Konstanten für definierte Zeiträume
Delphi-Quellcode:
Eine Funktion zum Berechnen der Zeitdifferenz bis zum nächsten Timerereignis.
const
iOneMinute : Integer = 60000; // eine Minute in Millisekunden iFiveMinutes : Integer = 300000; // Fünf Minuten in Millisekunden iFifteenMinutes : Integer = 900000; // Fünfzehn Minuten in Millisekunden iOneHour : Integer = 3600000; // Eine Stunde in Millisekunden iOneDay : Integer = 86400000; // Ein Tag in Millisekunden Hier wird der Wert berechnet, der Interval zuzuweisen ist, bevor der Timer eingeschaltet wird. iTimerInterval ist einer der obigen Konstanten Werte.
Delphi-Quellcode:
Habe einige Routinen zum Systemmonitoring, bei denen ich diese Berechnung einsetze. Die Routinen "schlagen" zur vollen Stunde, um Mitternacht, alle vollen fünf Minuten... zu. Die Abweichung durch das Berechnen ist immer kleiner 1 Sekunde. Damit kann ich für meinen Bedarf leben.
function CalcTimerInterval(iTimerInterval : Integer) : Integer;
Var dNow : Double; begin // Interval setzen // Tagesdatum und Uhrzeit holen dNow := Now; // Den Tagesanteil holen (= Nachkommastellen). dNow := dNow - Trunc(dNow); // Rest bis Mitternacht holen. dNow := 1 - dNow; // Nachkommastellen mal Millisekunden pro Tag Result := Trunc(dNow * iOneDay); // wir benötigen den Rest bis zum angegeben Interval, damit der Timer // zur nächsten Minute, Stunde, 0 Uhr ... aktive wird. // (Der durchschnittliche Rechenfehler liegt bei 500 Millisekunden.) Result := (Result mod iTimerInterval); end; Stephan |
Re: Immer wiederkehrende Aufgaben realisieren
Bei einem so lang laufenden Timer kommt mir ein Waitable Timer in den Sinn. Wenn man ihn APCs auslösen lässt, ist das genauer als die Lösung mit TTimer und einfacher als Lösungen mit GetTickCount.
|
Re: Immer wiederkehrende Aufgaben realisieren
Die Timer sollen variabel sein. Der User soll sie anhand von Sekunden einstellen können, wann die Popups angezeigt werden. Diese Zeitverschiebung wie Ihr sie hier beschreibt, würde ja nur zustande kommen, wenn das Programm immer wieder aus dem Tray geholt wird und wieder zurück gelegt wird. Nur ist das bei meinem Test nicht der Fall. Das Programm wird gestartet und unten ins Tray gelegt, ohne irgendwas damit zu machen. Ich habe im Programm insgesamt 4 Timer. Davon wird 1 Timer beim starten des Programms aktiviert und die restlichen 3 Timer werden aktiviert, wenn das Programm in den Tray geht. Der eine Timer, der beim Starten des Programms aktiviert wird, arbeitet zuverlässig. Nur die drei Timer, die beim ablegen ins Tray aktiviert werden, arbeiten gut nach einer Stunde nicht mehr korrekt. Das ist das was ich nicht verstehe.
Das Programm läuft ohne irgend ein Zugriff oder Benutzung vom User. Es werden nur die Popups erzeugt und angezeigt. Edit: Wie sieht das aus, mit dem Befehl SetTimer ? Ist der vielleicht besser als die TTimer-Komponente ? |
Re: Immer wiederkehrende Aufgaben realisieren
TTimer ist nur eine Kapselung von SetTimer. Waitable Timer sind genauer.
|
Re: Immer wiederkehrende Aufgaben realisieren
Zitat:
mfg Christian |
Re: Immer wiederkehrende Aufgaben realisieren
Zitat:
|
Re: Immer wiederkehrende Aufgaben realisieren
Ich habe da noch eine Frage, wenn ein TTimer schon läuft und ich dann Timer.Enabled := true setze, addiert sich dann die Zeit auch wieder ?
|
Re: Immer wiederkehrende Aufgaben realisieren
Das Aktivieren eines Aktiven Vorgangs hat keine Auswirkung
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz