DELPHI 中的Delay函数,利用GetTickCount和Application.ProcessMessages构建

时间:2022-05-12 03:16:52
DELPHI 中的Delay函数,利用GetTickCount和Application.ProcessMessages构建 作者 关劲松
        delphi 开发中有些时候需要停留片刻,等待界面输入,或异步操作完成,如果使用sleep函数的话,整个程序都会停顿,界面还会出现冻结的情况。因此需要自行编写一个delay函数,以毫秒为单位控制等待时间。         函数功能:GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD。         Application.ProcessMessages; 主要作用使程序在运行时能够响应外界事件。   利用以上两个函数,我们就可以编写出以毫秒为计数单位,好用的delay函数了。在指定时间内,等待异步事件的完成,如串口通信、网口通信、数据库查询返回等操作。
  
procedure Delay(msecs:integer);

procedure TForm1.Delay(msecs:integer);
var
Tick: DWord;
Event: THandle;
begin
Event := CreateEvent(nil, False, False, nil);
try
Tick := + DWord(msecs);
while (msecs > 0) and (MsgWaitForMultipleObjects(1, Event, False, msecs, QS_ALLINPUT) <> WAIT_TIMEOUT) do
begin
Application.ProcessMessages;
msecs := Tick - GetTickcount;
end;
finally
CloseHandle(Event);
end;
end;