Zitat von
RWarnecke:
Startet die TTimer - Komponente den Interval neu, wenn ich Sie deaktiviere und dann wieder aktiviere ? Ich bin bis jetzt zumindest davon ausgegangen.
Ja, dadurch kommen immer "Zeitverschiebungen" zustande, die sich im Laufe der Zeit spürbar summieren.
Wie brauchst Du denn den Timer: Immer zur vollen Stunde oder immer zur vollen Minute oder immer nach Abschluß eines Vorganges eine bestimmte Zeitdifferenz.
- Interval := 60000;
Timer ein
Timerereignis
Timer aus
irgendwas arbeiten lassen
Timer ein
Das zweite Timerereignis wird also eine Minute nach dem Abarbeiten des ersten Timerereignisses ausgelöst und nicht zur vollen nächsten Minute.
Eventuell kommst Du ja damit an Deinem Problem "vorbei":
Ein paar Konstanten für definierte Zeiträume
Delphi-Quellcode:
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
Eine Funktion zum Berechnen der Zeitdifferenz bis zum nächsten Timerereignis.
Hier wird der Wert berechnet, der Interval zuzuweisen ist, bevor der Timer eingeschaltet wird.
iTimerInterval ist einer der obigen Konstanten Werte.
Delphi-Quellcode:
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;
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.
Stephan