登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

有关编程的相关笔记资料存放

2010/8/15创(星期日)下雨

 
 
 

日志

 
 

sleep函数和Doevents在vb中的区别  

2010-09-16 10:56:25|  分类: VISUAL BASIC6.0 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
sleep函数和Doevents在vb中的区别 - 爱因斯坦 - 有关编程的相关笔记资料存放    

不知道大家在使用VB时有没有遇到过这样的现象:在运行程序时,按F8调试运行程序就正常执行,但是按F5或是编译成EXE文件执行时,却会出错或没有结果。本人今天就是遇到这样的奇怪问题,感觉这几天遇到的问题好多好奇怪,哎,还是自己动手,一个个解决吧。

按照上面的这种情况,应该不是代码本身编写上有问题,可以这么推测,那问题可能是:很多情况下执行一个循环任务需要一定的时间,调试的时候会停顿,循环内的任务就执行完了顺利进入下一个循环,而直接运行有时一个循环内的任务还没执行完就进入了下一个循环。带着这样的推测,再打开工程,给程序加上一定的延时功能,看是不是行得通吧。

果然问题解决了,无论是按F5直接运行还是编译出来的程序都没有问题了。这里再作总结:

延时-Sleep函数,主要功能就是使当前线程等待一段时间,用法就是“Sleep 毫秒数”,这里的毫秒数可以设置成任意整型数据。如 Sleep 1000,表示延时1秒(1000毫秒)。

Sleep与DoEvents之间是有点区别的。DoEvents其实是将CPU的控制权交出去,是为了在长循环中进程占据全部CPU资源,也就是相当于一种事件,网上有这样的说法:DoEvents就是把机会让给别的事件,自己暂时休息一下,但是占着的位置不会空出来。在死循环里放个DoEvents,CPU占用率是100%,同时这个进程还是可以做别的事情的。而Sleep前面也讲过了,就是使当前线程等待一段时间的,英文单词表面上理解也可以理解成“睡觉”的意思,也就是什么都不做了,也不会占着CPU资源的,当然进程也是什么事都不干的。

举个小例子:

Dim a As Integer
Dim b As Integer
Dim i As Integer
a=Text1.Text
b=Text2.Text
If a<>b Then
 For i = 1 To 30
            PlaySound App.Path & \music.mid  '这里的PlaySound是一个函数,由于与本主题无关,不写出来了。
            Sleep 1000 '延时1秒
        Next
End If

这就是一个简单的延时程序示例,用到了Sleep函数。(其实这时是变相的使用Sleep函数,可以实现音乐的循环播放,当然音乐的长度要跟延时长度有关,要不然可能效果不好)当然我们也可以用一个循环语句来实现Sleep函数功能,如下:

Sub wait(i As Integer)
 Dim s As Integer
 Dim j As Integer
 Dim k As Integer
 For j = 0 To i
     For k = 0 To 1000
         s = s
     Next k
 Next j
End Sub
在调用的时候直接写上wait(1000)就可以实现与Sleep函数差不多的功能了,当然,可能在某种程度上来说,这个函数的效率并没有Sleep函数强,但也值得一用。

忘记了,补上API声明,要不然无法使用。

Private Declare Sub Sleep Lib Kernel32 (ByVal dwMilliseconds As Long) '-----Sleep函数

sleep函数和Doevents在vb中的区别 - 爱因斯坦 - 有关编程的相关笔记资料存放
  评论这张
 
阅读(1296)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018