Функция
timeGetTime не имеет преимуществ в плане разрешающей способности по сравнению с функциями
Timer и
GetTickCount. Они все обновляются 100 раз в секунду. Вот тестовая программа:
Код |
---|
Declare Function timeGetTime Lib "winmm.dll" () As Long
Declare Function GetTickCount Lib "kernel32" () As Long
Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Currency) As Long
Sub dd()
Dim endTime!, cLoops&
Dim cTimer&, oldTimer!, newTimer!
Dim cTick&, oldTick&, newTick&
Dim cGT&, oldGT&, newGT&
Dim cPC&, oldPC@, newPC@
endTime = Timer + 1
While Timer < endTime
newTimer = Timer
If newTimer > oldTimer Then oldTimer = newTimer: cTimer = cTimer + 1
newTick = GetTickCount
If newTick > oldTick Then oldTick = newTick: cTick = cTick + 1
newGT = timeGetTime
If newGT > oldGT Then oldGT = newGT: cGT = cGT + 1
QueryPerformanceCounter newPC
If newPC > oldPC Then oldPC = newPC: cPC = cPC + 1
cLoops = cLoops + 1
Wend
Debug.Print "Число циклов", cLoops
Debug.Print "Timer", cTimer
Debug.Print "GetTickCount", cTick
Debug.Print "timeGetTime", cGT
Debug.Print "QueryPerf.", cPC
End Sub |
Здесь подсчитывается, сколько раз в течение 1 секунды изменилось число, возвращаемое разными функциями для измерения времени.
Мой результат (P3-500, Win2k)
Код |
---|
Число циклов 127719
Timer 100
GetTickCount 100
timeGetTime 100
QueryPerf. 127719 |
На более быстром компьютере первое и последнее число увеличатся, а остальные останутся прежними (если, конечно, в Win7 или 8 не увеличили разрешающую способность этих таймеров).
Значение
QueryPerformanceCounter меняется на самом деле гораздо чаще, данная методика измерений просто не может отследить каждое изменение этой функции.