让时间更精确

Author: 释月 Date: 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