Nimm das, Schurke!
Delphi-Quellcode:
procedure Delay(Milliseconds: Cardinal);
var
Tick: Cardinal;
Event: THandle;
begin
Event := CreateEvent(nil, False, False, nil);
try
Tick := Milliseconds;
// Milliseconds wird missbraucht als Zwischenspeicher für GetTickcount
Milliseconds := GetTickcount;
Tick := Tick + Milliseconds;
while (Tick > Milliseconds) and
(MsgWaitForMultipleObjects(1, Event, False, Tick-Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
begin
Application.ProcessMessages;
Milliseconds := GetTickcount;
end;
finally
CloseHandle(Event);
end;
end;
Vorteil: Es wird nur mit VZ-losen Werten gerechnet.
Nachteil: Milliseconds wird schändlich missbraucht.