取自网络
//延时函数,msec 为毫秒
procedure Delay(msec: single);
var
FirstTickCount: real;
begin
if msec > 0 then
begin
FirstTickCount := GetTickCount();
FirstTickCount := FirstTickCount + msec;
while FirstTickCount > GetTickCount() do
Application.HandleMessage; //关键在这里
end;
end;
// 测试CPU占用率<1% (CPU i3)
// 等待函数(保持界面正常响应) MSecs为毫秒
procedure WaitTime(MSecs: Integer);
var
FirstTickCount, Now: Longint;
begin
FirstTickCount := Windows.GetTickCount();
repeat
Now := Windows.GetTickCount();
Application.ProcessMessages;
until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount);
end;
// 测试CPU占用率10% -- 25% (CPU i3)
// *通过测试,在线程中调用Delay函数,存在线程函数执行中断(不在有任何响应,但主程序仍正常执行)的情况,而调用WaitTime则正常
// 为降低CPU占用率将WaitTime函数代码修改如下:
// 等待函数(保持界面正常响应) MSecs为毫秒
procedure WaitTime(MSecs: Integer);
var
FirstTickCount, Now: Longint;
begin
FirstTickCount := Winapi.Windows.GetTickCount();
repeat
Sleep(1); // 避免CPU占用率高
Application.ProcessMessages;
Now := Winapi.Windows.GetTickCount();
until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount);
end;
// 测试CPU占用率 < 1% (CPU i3)