关于Sleep延时函数

sunjunfeng3 2005-01-03 10:55:57
当用SLEEP函数来延时函数的时候,如果延时很长比如10秒,在延时期间这个CPU是处于等闲状态还是不断地暂用CPU资源的,也就是在SLEEP函数执行期间 CPU是等闲状态还是大量分配CPU资源
还有一个问题
我自己想写一个有等闲功能的函数,比如系统自带的API函数getmessage()这种工作原理的,这个函数跟一般的不一样,一般的函数当调用时种总一要迅速地执行过去的,如果用普通的函数反回值作为循环的判断条件,会使循环开销相当大,而GETMESSAGE()却很特别,当不需要执行的时候是处于等闲状态的,我想破了脑袋也没有想出它是怎么实现的,哪位大哥帮忙想想
...全文
289 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghy412 2005-01-03
  • 打赏
  • 举报
回复
sleep 在延时期间是不占CPU的,你可以在任务管理器中测试一下~!
Kshape 2005-01-03
  • 打赏
  • 举报
回复
我觉得如果一个线程处于sleep状态的话,它是不占用cpu的
因为此线程sleep后处于睡眠状态
高优先级的线程继续占用CPU,低级别的线程有可能开始进入cpu使用序列
kuki84 2005-01-03
  • 打赏
  • 举报
回复
没查过资料,根据自己的感觉,是占用cpu时间的。
第二个问题想不出
muleo 2005-01-03
  • 打赏
  • 举报
回复
加一句Label1.Update就会实时显示如下:
var
aa:integer;
dc:hdc;
begin
DC:=GetDC(Form1.Handle);
aa:=1;
while aa<=20 do
begin
sleep(500);
aa:=aa+1;
Textout(dc,10,10,Pchar(inttostr(aa)),length(inttostr(aa)));
Label1.Caption:=inttostr(aa);
Label1.Update; //同步显示
end;
end;
sunjunfeng3 2005-01-03
  • 打赏
  • 举报
回复
我发现一个问题 LABEL静态广西显示组件有个小问题,如果在程序中动态地改变它要显示的文字,不会被实时地显示出来,而是等程序处理完毕才显示
var
aa:integer;
dc:hdc;
begin
DC:=GetDC(Form1.Handle);
aa:=1;
while aa<=5 do
begin
sleep(1000);
aa:=aa+1;
label1.Caption:=inttostr(aa);
Textout(dc,10,10,Pchar(inttostr(aa)),length(inttostr(aa)));
end;
end;
sunjunfeng3 2005-01-03
  • 打赏
  • 举报
回复
经我测试
var
aa:integer;
begin
aa:=1;
while aa<=5 do
begin
sleep(10000);
aa:=aa+1;
end;
end;
上面的程序执行时,在循环没跳出的时候,程序基于死亡,不能响应外部消息,不能拖动窗体

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧