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 Property
Niin joo tuo esimerkin esittely onnistuu vain jos olet laittanut luokan nimeksi qpCounter...
Aihe on jo aika vanha, joten et voi enää vastata siihen.