'1秒=1000000微秒
'计时器可以使用 3种
'1.VB或VBA内置的Timer '不太准
'2.API函数GetTickCount 较准确
'3.apiQueryPerformanceCounter apiQueryPerformanceFrequency 更准确
' 来源:Office中国
apiQueryPerformanceCounter apiQueryPerformanceFrequency 是一种更好取得Windows系统运行时间,且不同于GetTickCount的方法
Windows系统的应用程序编程接口函数(API)都是使用C/C++语言编写的,VB中使用系统API函数需要改写声明。
GetiTickCount函数的含义是:取得自Windows系统启动以来到现在所经过的时间(单位:ms)。
在VB6.0中,API函数:
GetTickCount的声明如下:Private Declare Function GetTickCount Lib "kernel32" () As Long
在Windows中,该函数的原型是:DWORD GetiTickCount
我们可以发现在VB系统下,Gettickcount返回的是Long类型,长4个字节,而在WIndows下,GetTickCount返回的是DWORD类型,长4个字节的无符号数据类型。DWORD类型的数据范围是:0 ~ 2^32。
Long类型的数据范围是:-2147483648~2147483647,作为GetTickCount函数的返回值,只能是:0~2147483647,经过计算大约是:24.86天,也就是说,使用VB编制的系统在使用了24.86天以后,使用GetTickCount读回来的值就是负数了!具体原因请参考:http://topic.csdn.net/u/20090708/20/c2d2370d-d506-441e-b3c0-5aa3a6bcd566.html
但有一种更好的方法,比GetTickCount函数更好:
VB codeOption Explicit
Private Declare Function apiQueryPerformanceCounter Lib "kernel32" Alias "QueryPerformanceCounter" _
(lpPerformanceCount As Currency) As Long
Private Declare Function apiQueryPerformanceFrequency Lib "kernel32" Alias "QueryPerformanceFrequency" _
(lpFrequency As Currency) As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
'----------------------------------------------------
'函数功能:计算Windows自启动以来所经历的时间(s)
'返回类型:Double类型,你可以修改它,也可以返回整形。
'
'------------------------------------------------------
Public Function myTimer() As Double
Dim freq As Currency
Dim count As Currency
On Error GoTo errFun
apiQueryPerformanceFrequency freq '频率 相当于速度 v
apiQueryPerformanceCounter count '已发脉冲数 相当于距离 s
myTimer= count / freq '计算时间 t=s/v
Exit Function
errFun:
myTimer= 0
End Function