Tuossa kokeillessani QueryPerformanceCounteria huomasin, että sen käyttäminen on aika vaivalloista joten tein siitä erittäin helppokäyttöisen luokan jota osaa kuka vain käyttää.
QueryPerformanceCounterista vielä sen verran että se on:
-Laitteistopohjainen
-Tarkkuus pienempi kuin 1/1000000s
-Taajuus 3.19MHz
Luokka esitellään vaikka:
Public kello as qpCounter
Ja sitten asetetaan:
Set kello = New qpCounter
Luokan alustuksen yhteydessä ajastinta testataan löytyykö laitteistoa ja hakutulos palautetaan Luokan Available-ominaisuuteen.
Ajastimen taajuuden saa selville luokan Frequency-ominaisuudesta ja sen TÄRKEIMMÄN eli ajastimen ajan CurrentTime-ominaisuudesta. Se on sekunneissa.
Luokan koodi on tässä:
Option Explicit
Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As LARGE_INTEGER) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As LARGE_INTEGER) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Type LARGE_INTEGER
LowPart As Long
HighPart As Long
End Type
Private qpFrequency As LARGE_INTEGER
Private qpAvailable As Boolean
Private qpCurrentTime As LARGE_INTEGER
Private Sub Class_Initialize()
If QueryPerformanceFrequency(qpFrequency) = 0 Then
qpAvailable = False
Else
qpAvailable = True
End If
End Sub
Private Function LargeIntToCurrency(liInput As LARGE_INTEGER) As Currency
'copy 8 bytes from the large integer to an ampty currency
CopyMemory LargeIntToCurrency, liInput, LenB(liInput)
'adjust it
LargeIntToCurrency = LargeIntToCurrency * 10000
End Function
Public Property Get Available() As Boolean
Available = qpAvailable
End Property
Public Property Get Frequency() As Currency
Frequency = LargeIntToCurrency(qpFrequency)
End Property
Public Property Get CurrentTime() As Currency
QueryPerformanceCounter qpCurrentTime
CurrentTime = LargeIntToCurrency(qpCurrentTime) / LargeIntToCurrency(qpFrequency)
End PropertyNiin joo tuo esimerkin esittely onnistuu vain jos olet laittanut luokan nimeksi qpCounter...
Aihe on jo aika vanha, joten et voi enää vastata siihen.