CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  语言基础/算法/系统设计

来讨论sleep()这个函数

楼主zr3636(峥嵘)2004-09-01 00:15:39 在 Delphi / 语言基础/算法/系统设计 提问

这个函数在什么情况使用。我对这个函数的功能。。。怎么说呢。总觉得这个函数不好用。在程序运行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

相关问题

  • 讨论:如何写函数
  • 构造函数再讨论
  • -_-_-_-_-_-_-相似函数的讨论_-_-_-_-_-_-_-_-_
  • 关于Sleep函数
  • sleep这个API函数是什么意思?
  • [讨论]虚函数可以是内联函数吗?
  • sleep()函数的问题sdk
  • Sleep()函数问题,求助
  • 五子棋估价函数讨论
  • 讨论:C++中虚函数是何意?

关键词

  • 函数
  • sleep
  • gettickcount
  • tt
  • 程序
  • 觉得
  • 延时
  • run
  • dword
  • begin

得分解答快速导航

  • 帖主:zr3636
  • Jujus

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo