Hallo,
Zitat von
SirThornberry:
Ohne pollen geht es definitiv nicht, also einfach einen recht kleinen Interval nehmen.
Wie bereits gesagt wurde: Selbst wenn es eine Message geben würde, wäre es auch ein Pollen weil die Nachrichten ja per Polling abgeholt werden.
wieso nicht?
Ein paar Konstanten für definierte Zeiträume
Delphi-Quellcode:
const
iOneSecond : Integer = 1000; // eine Sekunde in Millisekunden
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 kann einer der obigen Konstanten Werte sein oder was, was man selbst berechnet.
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.
Result := (Result mod iTimerInterval);
end;
Uhrzeit lesen und Millisekunden bis zur nächsten vollen Sekunde berechnen, kann doch garnicht so schwer sein?
Delphi-Quellcode:
Timer.Enabled := False;
// Schiebe Zeiger eine Position weiter:
Timer.Interval := CalcTimerInterval(iOneSecond);
Timer.Enabled := True;