来讨论sleep()这个函数
这个函数在什么情况使用。我对这个函数的功能。。。怎么说呢。总觉得这个函数不好用。在程序运行sleep()这个函数期间,程序总觉得像是死了一般。在网上得到一个延时函数:
procedure TimeDelay(DT: Dword);
var
TT:Dword;
begin
TT:=GetTickCount;
while getTickCount-TT<DT do
application.ProcessMessages;//防止死锁
end;
感觉这个函数比sleep更好用。
有那位大虾来分析分析。
问题点数:20、回复次数:10Top
1 楼Jujus(某人)回复于 2004-09-01 01:32:54 得分 20
sleep是一个过程,功能是使当前线程等待若干毫秒,在此期间当前线程不能作任何操作,如果是进程的主线程,则无法对消息进行处理。
我刚才想了一个Sleep的框架,希望大家讨论
type
RunInSleep = procedure(params:array of const);
procedure _Sleep(delay:integer);
begin
_SleepEx(delay,nil,[]);
end;
procedure _SleepEx(delay:integer;run:RunInSleep;args: array of const);
var dt : TDateTime;
begin
dt := Now();
while dt + delay / 24 / 60 / 60 / 1000 < Now() do
begin
if Assigned(run) then
run(args);
Application.ProcessMessages;
end;
end;
定义RunInSleep类型的目的是为了在_SleepEx过程中执行一些相应的操作,如更新窗体。Top
2 楼Jujus(某人)回复于 2004-09-01 01:59:17 得分 0
上述函数有误,应该是
procedure _SleepEx(delay:integer;run:RunInSleep;args: array of const);
var dt : TDateTime;
begin
dt := Now();
while dt + delay / 24 / 60 / 60 / 1000 > Now() do
begin
if Assigned(run) then
run(args);
Application.ProcessMessages;
end;
end;Top
3 楼Jeff20040819(美丽)回复于 2004-09-01 08:20:57 得分 0
sleep(),个人感觉挺好用的,比如做串口通讯时,用sleep()延时,可以读完缓冲区中数据
多用几次就熟了Top
4 楼crossbow(【以无形为形】)回复于 2004-09-01 08:32:40 得分 0
while getTickCount-TT<DT do
application.ProcessMessages;//防止死锁
这样搞资源消耗很厉害Top
5 楼crossbow(【以无形为形】)回复于 2004-09-01 08:35:33 得分 0
你可以看看VCL中的application.ProcessMessages;到底是什么,不过调用了一个API,不停的Push 和 Pop 寄存器,可想而知Top
6 楼lwglucky(才鸟)回复于 2004-09-01 08:40:26 得分 0
那是因为你在主线程调用了sleep..一般是在新线程里调用该函数。Top
7 楼yinweixian(blackyin)回复于 2004-09-01 09:03:04 得分 0
感觉sleep很好用的,尤其是串口通信的等待。Top
8 楼cdsgajxlp(起名很难)回复于 2004-09-01 09:51:17 得分 0
sleep 很好用啊
我认为比你的好多了,估计一下,好10000倍吧Top
9 楼qiuafa()回复于 2004-09-01 10:02:19 得分 0
画蛇添脚Top
10 楼rabbit1125(兔子)回复于 2004-09-01 12:22:25 得分 0
Sleep一般放在自己创建的线程里使用,串口通讯里经常用于定时读取数据。Top




