this slowpoke moves

Sleep without Freeze

Damit ein Programm nicht komplett einfriert, wen man den Sleep Befehl anwendet.

Der Sleep Befehl wird ausgeführt, aber das Programm lässt sich weiter steuern. 


procedure SleepWithoutFreeze(msec: int64);
var
  Start, Elapsed: DWORD;
begin
  Start := GetTickCount;
  Elapsed := 0;
  repeat
    // (WAIT_OBJECT_0+nCount) is returned when a message is in the queue.
    // WAIT_TIMEOUT is returned when the timeout elapses.
    if MsgWaitForMultipleObjects(0, Pointer(nil)^, FALSE, msec-Elapsed, QS_ALLINPUT) <> WAIT_OBJECT_0 then Break;
    Application.ProcessMessages;
    Elapsed := GetTickCount - Start;
  until Elapsed >= msec;
end;
Beispiel :
procedure TForm1.Button1Click(Sender: TObject);
begin
  SleepWithoutFreeze(5000);  // 5 sec.
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate