我需要一种方法来暂停函数的执行几秒钟。我知道可以使用sleep方法来实现,但是该方法在执行时会“冻结”应用程序。我还知道可以使用以下代码来避免冻结:
// sleeps for 5 seconds without freezing
for i := 1 to 5 do
begin
sleep(1000);
application.processmessages;
end;
这种方法存在两个问题:一是仍然每秒钟发生冻结,二是每秒钟调用“application.processmessages”。我的应用程序需要大量CPU资源,而每个processmessages调用都会执行很多不必要的工作,浪费CPU资源;我只想暂停工作流程,不需要其他操作。我真正需要的是一种像TTimer一样暂停执行的方法,如下面的示例所示:
// sleeps for 5 seconds
mytimer.interval := 5000;
mytimer.enabled := true;
// wait the timer executes
// then continue the flow
// running myfunction
myfunction;
这种方法的问题是'myfunction'不会等待mytimer,它会在mytimer启用后立即运行。是否有另一种方法可以实现我想要的暂停?提前感谢您。
ProcessMessages()
,主线程不再处于睡眠状态,并且即使没有等待处理的消息,轮询消息队列以获取消息也会产生开销。 - Remy Lebeau