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