Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: QueryPerformanceCounter

Lumi-ukkeli [21.08.2005 11:53:10]

#

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...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta