首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

sleep 延时 假死 有关问题

2012-03-09 
sleep 延时 假死 问题!可有更好的函数或方法 延时呀!假死很不好呀[解决办法]循环:sleep(10)application.p

sleep 延时 假死 问题!
可有更好的函数或方法 延时呀!
假死很不好呀

[解决办法]
循环:
sleep(10);
application.processmessages;

直到够时间
[解决办法]

Delphi(Pascal) code
//让循环延时一段时间的函数procedure Delay(msecs:integer);  var   Tick: DWord;  Event: THandle;begin   Event := CreateEvent(nil, False, False, nil);  try  Tick := GetTickCount + 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;
[解决办法]
不在主线程中sleep就可以了,或者用楼上两位的方法,不过要消耗cpu
[解决办法]

再用个线程给个提示,告知用户 程序还在运行!
在主线程中sleep的话就应该不是假死了吧...停止一切活动,装死1分钟!哈哈
[解决办法]
循环:
sleep(10);
application.processmessages;

直到够时间
[解决办法]
Mark
[解决办法]
2楼的朋友,我不知道你明白你所贴的代码的含义没?
CreateEvent函数一般在多线程中使用,你在这里创建事件有啥意思?

个人认为你的代码十分多余,我贴一个比较短小的过程实现楼主的需求:

procedure pause(t:cardinal);
begin
t:=t+GetTickCount;
while t>GetTickCount do Application.ProcessMessages;
end;
[解决办法]
不行,也到底哪一种方法不行啊

没有sleep(10)的循环,cpu是会高的
[解决办法]
每天回帖即可获得10分可用分!
[解决办法]
function SP(MaxWaitTime: Cardinal): Boolean;
var I:Integer;WaitedTime:Cardinal;
begin
WaitedTime:=0;
while (WaitedTime<MaxWaitTime) do
begin
SleepEx(100,False);
Inc(WaitedTime,100);
Application.ProcessMessages ;
end
end;

调用:SP(3000);

热点排行