Timer s velkým rozlišením

Popis:
VB má sice funkci, která je schopna pracovat s určitým poměrně přesným rozlišením, ale současný moderní hardware umožňuje používat timer s velikým stupněm rozlišení. Stačí na to jen pár API:

Private Declare Function QueryPerformanceFrequencyAny Lib _
    "kernel32" Alias "QueryPerformanceFrequency" _
    (lpFrequency As Any) As Long
Private Declare Function QueryPerformanceCounterAny Lib _
    "kernel32" Alias "QueryPerformanceCounter" _
    (lpPerformanceCount As Any) As Long

Při použití těchto funkcí ale narážíme na jeden problém. Funkce používají 64-bitový Long Integer v parametrech, ale to VB neumí. Nechá se to obejít poměrně jednoduchým trikem - typ Currency je taky 64-bitový, akorát jej VB používá trochu jinak, což v tomto případě nevadí:

Private Sub Command1_Click()

    Dim frequency As Currency
    Dim startTime As Currency
    Dim endTime As Currency
    Dim result As Double
    
    ' Zjistíme si počítadlo frekvence
    ' Vrací 0 pokud hardware tento counter nepodporuje
    If QueryPerformanceFrequencyAny(frequency) = 0 Then 
        MsgBox "Tento počítač to nepodporuje !!!", vbCritical
        Exit Sub
    End If
    
    ' start časování
    QueryPerformanceCounterAny startTime
    
    ' zde nějaký kód, který se má vykonat ...
    Dim i As Long
    For i = 1 To 1000000
    Next

    ' konec času 
    QueryPerformanceCounterAny endTime
    
    result = (endTime - startTime) / frequency
    
    MsgBox result

End Sub

Zpět

Autor: The Bozena