暂停几秒(100分)

A

abcxca

Unregistered / Unconfirmed
GUEST, unregistred user!
以前有人让程序在运行的过程中暂停几秒,用的是循环语句。
但这种作法缺点是会令CPU的使用率马上升到100%。
有没有一种更好的办法,暂停几秒而不会令CPU使用率突升??
 
Sleep(5000);
 
procedure Sleep(ATime: cardinal);
Parameters
ATime: cardinal
The number of milliseconds to sleep.
 
赞同以上!
 
sleep会使程序失去响应,

可以通过一个循环,然后判断,时间

这个时间可以通过获取系统运行时间来得到
就是gettickcount

vb声明为:
Private Declare Function GetTickCount Lib "kernel32" () As Long

 
// sleep会使程序失去响应
杞人忧天吧,人家要的就是这个效果:)

Sleep(ms); 可行。

 
这是因为你是单线程,如果是多线程,就把时间交给其它线程了。
 
LuJuhe 说的方法是会引起WINDOWS不认识该Sleep的程序;
shawls 说的会引起CPU的使用马上升为100%;
jsxjd 说的线程问题,但试过用DELPHI写一个线程,什么也不干,就每隔几秒
刷新一下某个Edit控件,结果运行2小时后机子变慢,在取消屏保后该程序的窗
口不能自行刷新,只剩个空白的框框,同时什么反应都没有,只能强行杀掉该程序.
 
建议不要使用sleep, 有很多问题... 在本站内搜索 mydelay, 可以查到用
Gettickcount编的函数, 非常好用。
 
同意上述……[:)]
 
sleep以后可以application.postmessages亚
 

如果要暂停几秒,不要用sleep,程序不会响应其它消息。
在站内搜索一下delay
 
procedure Delay(aTimeOut: Cardinal);
var
T : Cardinal;
Msg : TMsg;
begin
T := GetTickCount;
while GetTickCount-T > aTimeout do
begin
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end
end;
 
begin
sleep(5000);
Application.ProcessMessages;
end;
两句话就解决了,何必这么麻烦
 
TO:pipo
你试试看是不是解决了。例如运行上面代码后在5秒内点击按钮或者拖动窗体看看是否有作用。
我不再回复了。这个问题只要在站内搜索一下就有一大堆类同的答案。
http://richsearch.com/
 
是我错了,不假思索,该死该死
Application.processmessages是用在长时间处理数据的时候用的,不适合这里,嘿嘿

在陈宽达的《Delphi深度历险》中有该问题的多种解决办法,可以参考参考
 
顶部