使用timeGetTime函數更精準地計算時間差
發表時間:2023-08-13 來源:明輝站整理相關軟件相關文章人氣:
[摘要]我想每 0.005 秒做某一件工作, 所以撰寫了以下程序:Dim tm1 As SingleDotm1 = TimerWhile Timer - tm1 < 0.005 ' 等于 0....
我想每 0.005 秒做某一件工作, 所以撰寫了以下程序:
Dim tm1 As Single
Do
tm1 = Timer
While Timer - tm1 < 0.005 ' 等于 0.005 秒
DoEvents
Wend
...做某一件工作
Loop
但實際上, 在 While 循環里面, Timer 函數幾乎每次都得到相同的時間,只有大約隔了 0.05秒才會得到不同的時間, 也就是說 Timer 的準確性只有 0.05 秒,但我希望進行的工作卻是每 0.005 秒一次, 該怎么辦呢?可以改用 Windows API 的 timeGetTime 函數, 此一函數會傳回 Windows 開機以來所經過的時間,時間單位是 1/1000 秒, 舉例來說, 開機經過 2 分鐘, 則傳回值等于 2*60*1000, timeGetTime 的優點是時間可以精確到 1/1000 秒, 所以可以用來解決上述的問題,細節如下:
1. API 的聲明:
Private Declare Function timeGetTime Lib "winmm.dll" Alias "timeGetTime"
() As Long
注:如果以上的聲明放在「一般模塊」底下, 應將 Declare 之前的 Private 保
留字去掉。
2. 程序范例:
Dim tm1 As Long
Do
tm1 = timeGetTime
While timeGetTime - tm1 < 5 ' 等于 5/1000 = 0.005 秒
DoEvents
Wend
...做某一件工作
Loop