wenn die Zeit noch nicht erreicht ist, dann kannst Du den Thread ja eine gewisse Zeit schlafen legen (sleep(zielzeitInSekunden - nowInSekunden)).
das werde ich direkt mal ausprobieren.
es geht hier um dynamisch erzeugte "objekte" die überwacht werden. ich möchte nur ungern hundert timer erstellen.
folgendes habe ich nun (kurzfassung):
Delphi-Quellcode:
procedure watcher(iNextRun: LongInt);
var
// Variablen Deklaration
begin
iSleep := iNextRun - DateTimeToUnix(now); // zeit errechnen, welche es bis zum "countdown" ist
if iSleep < 0 then // sicherheitshalber prüfen, ob der wert positiv ist
iSleep := 1;
while True do // ungehindert (hoffe ich ja) und unendlich lange (bis programmende) ..
begin
Sleep(iSleep * 1000); // schlafe exakt die zeit, welche oben als "countdown" genannt wurde
if DateTimeToUnix(now) >= iNextRun then // ist der zeitpunkt erreicht dann..
begin
//.. führe noch mehr anweisungen aus
// danach fängt der code wieder oben bei sleep() an
end;
end;
end;
von der cpu-belastung her ist es nun perfekt. vorher 13% (pro thread), nun maximal 1%.