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
|