http://topic.csdn.net/u/20090904/23...f5bb3ad574.html
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...a3a6bcd566.html
最近我偶然间发现一个高人提供的一个方法,感觉能弥补VB中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...a3a6bcd566.html
最近我偶然间发现一个高人提供的一个方法,感觉能弥补VB中GetTickCount函数的不足。代码如下:
VB code
OptionExplicit
Private Declare Function osQueryPerformanceCounter Lib "kernel32" Alias "QueryPerformanceCounter" _
(lpPerformanceCount AsCurrency) AsLong
Private Declare Function osQueryPerformanceFrequency Lib "kernel32" Alias "QueryPerformanceFrequency" _
(lpFrequency AsCurrency) AsLong
Private Declare Function GetTickCount Lib "kernel32" () AsLong
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'函数功能:计算Windows自启动以来所经历的时间(s)
'返回类型:Double类型,你可以修改它,也可以返回整形。
'
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
PublicFunctionTimer() AsDouble
Dim freq AsCurrency
Dim count AsCurrency
OnErrorGoTo errFun
osQueryPerformanceFrequency freq '频率 相当于速度 v
osQueryPerformanceCounter count '已发脉冲数 相当于距离 s
Timer= count / freq '计算时间 t=s/v
ExitFunction
errFun:
Timer=0
End Function
PrivateSub Form_Load()
Text1.Text =""
Text2.Text =""
Timer1.Enabled =True
Timer1.Interval =1000
End Sub
'%%%%%%%%%%%%%%%%%%%%%%
'过程功能:使用两个方法计算系统启动时间,实际测试,两者值有点误差。
'
'%%%%%%%%%%%%%%%%%%%%%%%
PrivateSub Timer1_Timer()
Text1.Text =Timer
Text2.Text = GetTickCount *0.001
End Sub