1. 程式人生 > >實現毫秒級和納秒級計數的幾個API--timeGetTime、GetTickCount、QueryPerformanceCounter

實現毫秒級和納秒級計數的幾個API--timeGetTime、GetTickCount、QueryPerformanceCounter

Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Declare Function QueryPerformanceCounter Lib "kernel32 " (lpPerformanceCount As Any) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32 " (lpFrequency As Any) As Long

Private Declare Sub Sleep Lib "KERNEL32.dll" (ByVal dwMilliseconds As Long)

Sub timeCount()
    Dim curFrequency As Currency
    Dim curStart As Currency
    Dim curEnd As Currency
    Dim delayms%
    
    delayms = 66

    
    QueryPerformanceFrequency curFrequency
    QueryPerformanceCounter curStart            '精度100ns
    Sleep delayms
    QueryPerformanceCounter curEnd
    MsgBox "QueryPerformanceCounter用時: " & (curEnd - curStart) / curFrequency * 1000 & "ms "

    
    curStart = Timer               '精度55ms
    Sleep delayms
    MsgBox "Timer計時: " & (Timer - curStart) * 1000 & "毫秒"
    
    curStart = GetTickCount        '精度55ms
    Sleep delayms
    MsgBox "GetTickCount計時: " & (GetTickCount - curStart) & "毫秒"
    
    curStart = timeGetTime         '精度10ms
    Sleep delayms
    MsgBox "timeGetTime計時: " & (timeGetTime - curStart) & "毫秒"
End Sub