龙空技术网

VBA程序中,利用API函数让程序达到毫秒级的延时

VBA语言専攻 1624

前言:

此时你们对“php usleep 毫秒”大约比较着重,咱们都想要分析一些“php usleep 毫秒”的相关文章。那么小编同时在网摘上网罗了一些有关“php usleep 毫秒””的相关资讯,希望小伙伴们能喜欢,小伙伴们快快来学习一下吧!

大家好,我们今日继续讲解VBA代码解决方案的第82讲内容:如何利用代码让程序延时,SLEEP函数和timeGetTime函数两个API函数的讲解。

在上一讲中我们讲了使用Wait方法,但这种方法的不足是只能提供精度为1秒的延时,如果需要更低精度的延时,需要使用Sleep API函数,如下面的代码所示。

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub MyTypeDemo()

Dim sTest As String

Dim i As Integer

sTest = "欢迎你来到这个平台学习VBA!"

For i = 1 To Len(sTest)

Range("A1").Value = Left(sTest, i)

Sleep 200

Next

End Sub

代码解析:

MyTypeDemo过程模拟打字效果在单元格A1中输入一行文字。"欢迎你来到这个平台学习VBA!"

第1行代码Sleep API函数声明,参数dwMilliseconds为以毫秒为单位的时间长度。

在第6行到第9行代码在每次循环时增加显示的数据,并且在每次增加时使用Sleep语句延时200毫秒,好像字符逐个输入,从而达到模拟打字的效果.

在上面的实例中,对于精确延时使用的sleep函数,使用这个函数要注意的是,由于这个函数是Windows API函数,使用前必须先声明,然后使用。 虽然sleep函数延时是毫秒级的,精确度比较高,但它在延时时会将程序挂起,使操作系统暂时无法响应用户操作,所以在长延时的时候不适合使用它。

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

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

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

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

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

Sub S_timeGetTime()

Dim time1 As Long

time1 = timeGetTime

Range("A2").Value = timeGetTime

Do

Range("A3").Value = timeGetTime

DoEvents

Loop While timeGetTime - time1 < 1000

MsgBox "时间到!"

End Sub

注意:延时时间单位是毫秒。由于延时函数中使用了 DoEvents语句交出了系统控制权,所以不会影响用户的其它操作。

代码截图:

运行:

今日内容回向:

1 如何实现程序的延时呢?

2 本节讲了两种延时的方式,是否理解呢?

标签: #php usleep 毫秒 #vb timegettime