CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

用Sleep做延时等待好吗?

楼主zwx963536()2003-12-03 10:57:51 在 VB / 基础类 提问

RT 问题点数:0、回复次数:7Top

1 楼SoHo_Andy(冰)回复于 2003-12-03 11:07:52 得分 0

缺点是只在   32位元中才有提供,   所以要在   VB4-32   位元以上才可使用  
   
  使用自定义函数就没有这样的问题  
  Public   Sub   Delay(HowLong   As   Date)  
        TempTime   =   DateAdd("s",   HowLong,   Now)  
        While   TempTime   >   Now  
            DoEvents   '让   windows   去处理其他事  
        Wend  
  End   Sub  
   
  '在程序中只要如下使用即可:  
   
  Private   Sub   Command1_Click()  
        Delay   5  
  End   Sub  
  Top

2 楼aiur2000(破愿立志别故里,荆棘南下思北风)回复于 2003-12-03 11:07:53 得分 0

sleep   2000我用的时候不知道到底成功没。  
  后来换成了doeventsTop

3 楼dream901(dream)回复于 2003-12-03 12:30:06 得分 0

用sleep会让整个程序挂起的(没有响应了),还是用doevents好Top

4 楼rainstormmaster(暴风雨 v2.0)回复于 2003-12-03 12:36:31 得分 0

在VB中实现延时(等待)的几种方法  
           
  在程序流程中经常要延时一段时间后再继续往下执行,在VB中常用的有以下几种方法(因为Timer控件打乱了程序的流程所以一般不用它):  
  1.使用Windows   API函数Sleep  
  新建一个工程,添加一个TextBox控件和一个CommandButton控件,再将以下代码复制到代码窗口  
  '声明:  
  Private   Declare   Sub   Sleep   Lib   "kernel32"   (ByVal   dwMilliseconds   As   Long)  
   
  Private   Sub   Command1_Click()  
  Text1   =   "sleep   begin"  
  Sleep   3000  
  Text1   =   "sleep   end"  
  End   Sub  
  按F5执行,按下Command1按钮,程序停止执行,3秒钟内不对用户的操作做出反应,并且Text1里的内容并没有发生改变.这是怎么回事呢?原来,Sleep函数功能是将调用它的进程挂起dwMilliseconds毫秒时间,在这段时间内,此进程不对用户操作做出反应,程序中虽然将Text1的Text属性改成Sleep   begin,但还没等完成对屏幕的更新进程就被挂起了,对用户来说程序象是死机一样。所以这种方法虽然简单,但并不适用.  
   
  2.使用Timer()函数  
  这是用的最多的一种方法,也是在VB联机手册中所推荐的。添加一个CommandButton控件,再将以下代码添加到代码窗口中:  
   
  Private   Sub   Command2_Click()  
  Dim   Savetime   As   Single  
  Text1   =   "Timer   begin"  
  Savetime   =   Timer   '记下开始的时间  
  While   Timer   <   Savetime   +   5   '循环等待  
  DoEvents   '转让控制权,以便让操作系统处理其它的事件。  
  Wend  
  Text1   =   "Timer   ok"  
  End   Sub  
   
  这种方法虽然也很简单,但却有有一个致命缺陷,那就是Timer函数返回的是从午夜开始到现在经过的秒数。所以Timer返回的最大值也只是60*60*24-1秒,如果从一天的23:59:58秒开始计时等待5秒,那么程序会永远地循环下去。要进行改良,就要加上判断是否又开始了新的一天,那岂不是太麻烦.下面给大家推荐另一个Windows   API函数.  
  3.使用Windows   API函数timeGetTime()  
  timeGetTime函数没有参数,返回值是从开机到现在所经历的毫秒数,这个毫秒数是非周期性递增的,所以不会出现Timer()函数出现的问题,而且这种方法的精确性高于上一种方法。添加一个CommandButton控件,再将以下代码添加到代码窗口中:  
  '声明  
  Private   Declare   Function   timeGetTime   Lib   "winmm.dll"   ()   As   Long  
   
  Private   Sub   Command3_Click()  
  Dim   Savetime   As   Double  
  Text1   =   "timeGetTime   begin"  
  Savetime   =   timeGetTime   '记下开始时的时间  
  While   timeGetTime   <   Savetime   +   5000   '循环等待  
  DoEvents   '转让控制权,以便让操作系统处理其它的事件。  
  Wend  
  Text1   =   "timeGetTime   end"  
  End   Sub  
  按F5执行程序,按这几个按钮,您可以感受一下这几种方法的优劣      
     
  Top

5 楼new_dream(lele)回复于 2003-12-03 12:41:01 得分 0

高手啊。  
  学习学习。Top

6 楼online(龙卷风V4.0--决战江湖(MS MVP-VB))回复于 2003-12-03 13:15:16 得分 0

你看看,具体的代码就不贴了  
  http://expert.csdn.net/Expert/topic/2472/2472295.xml?temp=.3526117  
   
  http://expert.csdn.net/Expert/ForumList_Search.asp?searchtype=1&bigclassid=51&smallclassid=5101&searchKeys=%D1%D3%CA%B1&author=&tabletype=now  
  Top

7 楼gys_yxr(毛毛)回复于 2003-12-03 14:09:46 得分 0

占用系统资源  
  不建议使用Top

相关问题

  • VB有没有Sleep这样的延时 函数? 在线等待!谢谢
  • DB2调用,在线等待
  • 如何做延迟?(在线等待)
  • 在一个循环语句中,让它等待一秒钟再循环一下,用个哪函数延了?
  • vfp:如何让程序等待一段时间,类似vc的sleep的函数??????
  • delphi 中使用fastreport的问题,请大侠提个醒把!!!在线等待等待等待!
  • 有谁用过softice???在线等待
  • NOT EXISTS 不管用?在线等待
  • OnKeyPress事件无作用?!在线等待…………
  • 使用jbuilder的困惑,在线等待

关键词

  • sleep
  • 函数
  • 控件
  • 代码
  • 执行
  • 用户
  • 程序
  • doevents
  • timer
  • 添加

得分解答快速导航

  • 帖主:zwx963536

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

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