标题让时间更精确
栏目游戏世界
作者释月
发布1998年第36期13版
在应用VB编程的时候,你是否发现VB的时间控制并不十分精确,在VB中我们有时需要一个比VB自带的now()更精确的计时函数,下面的BetterNow()就是这样的一个函数,在Pentium 166 MMX的机器上,它大概每10微秒执行一次,而VB自带的函数是每180微秒执行一次。ButterNow()更精确,它支持1毫秒的事件触发,而VB的now()只支持1000毫秒的事件触发。同样的它也比Timer()更快更精确,因而它可以在记录时间流逝方面替代Timer(),比Timer()更好的是它不会在每天午夜自动清零。
#If Win16 Then
Private Declare Function timeGetTime Lib _
"MMSYSTEM.DLL" () As Long
#Else
Private Declare Function timeGetTime Lib "winmm.dll" _
() As Long
#End If
Function BetterNow() As Date
Static offset As Date
Static uptimeMsOld As Long
Dim uptimeMsNew As Long
'定义一秒
Const oneSecond=1/(24#*60*60)
'定义一毫秒
Const oneMs=1/(24#*60*60*1000)
uptimeMsNew=timeGetTime()
'如果是第一次调用函数或运行时间超过47天,重新计算时间。
If offset=0 Or uptimeMsNew < uptimeMsOld Then
offset=Date-uptimeMsNew*oneMs+CDbl(Timer)*_
oneSecond
uptimeMsOld=uptimeMsNew
End If
BetterNow=uptimeMsNew*oneMs+offset
End Function