vb延时的几种方法

您所在的位置:网站首页 vb退出的代码怎么表达 vb延时的几种方法

vb延时的几种方法

2024-06-29 09:29| 来源: 网络整理| 查看: 265

作者:iamlaosong

1、一般延时

一个应用接口需要限制运行速度,需要在循环中加个延时函数,这个延时不需要多么精确,要求有个几秒延时,网上用的比较多的就是用Timer函数编写,Timer是VBA自带的函数,用起来比较方便,一般程序如下:

‘延时程序 Sub delay(T As Single) Dim time1 As Single time1 = Timer Do DoEvents Loop While Timer - time1 < T End Sub

虽然一般用这个函数延迟用秒做单位,但1秒以内的延时也是可以的,老一点的机器时钟中断为每秒18.2次,就是说时间间隔在0.055秒(55毫秒)左右,现在的机器一般都比这个高,具体多少需要测试。Timer函数根据时钟中断记录当天的时间序列值,以秒为单位,也就是从当天0点开始到当前时间点上所经历的秒数(含小数)。当从23:59分钟跨越到0点是,Timer函数的时间也重新归零开始计算。通过查看函数中的timer值得变化情况,可以确定时钟中断的间隔。例如本人的机器timer值变化如下:

56742.09 56742.11 56742.13 56742.14 56742.16 56742.16 56742.17 56742.19 56742.2 56742.22 56742.23 可以看出,时间间隔在10-20毫秒之间(精确显示实际精度是0.015625秒,15.625毫秒)。如果时延在1秒以内,精度要求不高,就可以用这个方法,如:

delay(0.25)

由于延时函数中使用了 DoEvents语句交出了系统控制权,所以不会影响用户的其它操作。

上面方法虽然简单,但是有一个致命的缺陷,就是Timer函数的时间每天都是从0开始,如果从23:59:59开始延时1秒以上的话,这个延时程序将永远执行下去,下面的延时程序将弥补这个缺陷:

‘延时程序 Sub delay(T As Single) Dim time1, time2 As Single time1 = Timer Do DoEvents time2 = Timer - time1 If time2 < 0 Then time2 = time2 + 86400 ‘86400=24*3600 Loop While time2 < T End Sub

2、精确延时

精确延时可以使用sleep函数,sleep函数是Windows API函数,使用前必须先声明,然后使用,例如:

private Declare Sub Sleep Lib “kernel32” Alias “Sleep” (ByVal dwMilliseconds As Long)

。。。

sleep 1000 '延时1秒

。。。

sleep函数延时是毫秒级的,精确度比较高,但它在延时时会将程序挂起,使操作系统暂时无法响应用户操作,所以在长延时的时候不适合使用它。

3、使用timeGetTime函数进行延时 更好的办法是使用timeGetTime函数,timeGetTime函数返回的是开机到现在的毫秒数,可以支持1毫秒的间隔时间,而且永远增加,不存在回头的问题。当然不是永远不回头,毕竟Long型变量(双字,4字节)也是有取值范围的,这个值在0到2^32之间。大约49.71天。

同sleep函数一样,timeGetTime函数是Windows API函数,使用前必须先声明,即:

Private Declare Function timeGetTime Lib “winmm.dll” () As Long

延时函数和上面的一样,只是将Timer函数换成timeGetTime:

‘精确延时程序 Sub delay(T As Long) Dim time1 As Long time1 = timeGetTime Do DoEvents Loop While timeGetTime - time1 < T End Sub delay(1000) ‘ delay time for 1 ms 注意:延时时间单位是毫秒。由于延时函数中使用了 DoEvents语句交出了系统控制权,所以不会影响用户的其它操作。 这里写图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3