vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Windows/System22.03.05
QueryPerformanceFrequency-Funktion

Diese Funktion ermittelt die Frequenz des Hochleistungstimers, falls vorhanden. Diese Frequenz stellt die Erhöhung um jeweils eine Stelle pro Sekunde dar.

Betriebssystem:  Win95, Win98, WinNT 3.1, Win2000, WinMEViews:  11.469 

Deklaration:

Declare Function QueryPerformanceFrequency Lib "kernel32.dll" ( _
  lpFrequency  As LARGE_INTEGER) As Long

Beschreibung:
Diese Funktion ermittelt die Frequenz des Hochleistungstimers, falls vorhanden. Diese Frequenz stellt die Erhöhung um jeweils eineStelle pro Sekunde dar.

Parameter:
lpFrequencyErwartet eine ULARGE_INTEGER-Struktur die mit dem ermitteltemWert gefüllt wird. Um diesen Wert zu extrahieren, müssen Sie diese Strukturmit der MOVEMEMORY-Funktion in eine Currency-Variablekopieren und den dann darin enthaltenen Wert mit 10.000 multiplizieren. Dieserermittelte Wert stellt die Erhöhung des Counters pro Sekunde dar.

Rückgabewert:
Ist die Funktion erfolgreich, so ist ein Wert "ungleich 0" die Rückgabe, andernfalls wird derWert "0" zurückgegeben (wenn z.B. kein Hochleistungstimer vorhandenist).

Beispiel:

Private Declare Function QueryPerformanceCounter Lib "kernel32.dll"  ( _
  lpPerformanceCount As ULARGE_INTEGER) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32.dll"  ( _
  lpFrequency As ULARGE_INTEGER) As Long
Private Declare Function SetPixelV Lib "gdi32.dll" ( _
  ByVal hdc As Long, _
   ByVal X As Long, _
  ByVal Y As Long, _
  ByVal crColor As Long) As Long
Private Declare Function SetPixel Lib "gdi32.dll" ( _
  ByVal hdc As Long, _
  ByVal X As Long, _
  ByVal Y As Long, _
  ByVal crColor As Long) As Long
Private Declare Sub MoveMemory Lib "kernel32.dll" _
  Alias "RtlMoveMemory"  ( _
  Destination As Any, _
  Source As Any, _
  ByVal Length As Long)
 
Private Type ULARGE_INTEGER
  LowPart As Long
  HighPart As Long
End Type
 
Private CounterFreq As Currency
Private TmpUInt As ULARGE_INTEGER
' Funktion um eine ULARGE_INTEGER in eine Currency-Variable zu kopieren
Private Function UlargeToCurrency(ByRef ULarge As ULARGE_INTEGER) As Currency 
  Dim Retval As Long, TmpCur As Currency
 
  ' Ularge in Currency kopieren und mit 10000 multiplizieren
  MoveMemory TmpCur, ULarge, 8
  UlargeToCurrency = TmpCur * 10000
End Function
' Counter-Frequenz ermitteln
Private Sub Form_Load()
  Me.ScaleMode = vbPixels
 
  ' Ermitteln, ob ein Hochleistungs-Timer verfügbar ist
  Retval = QueryPerformanceFrequency(TmpUInt)
  If Retval = 0 Then
    MsgBox "Dieses System hat keinen Hochleistungs Zeitmesser"
    Command1(0).Enabled = False
    Command1(1).Enabled = False
    Exit Sub
  End If
 
  ' Umwandeln der 64-Bit-Integer in eine Currency-Variable
  CounterFreq = UlargeToCurrency(TmpUInt)
  Debug.Print "Hochleistungs Timer Frequenz: " & CounterFreq & " Counts  _
  pro Sekunde"
End Sub
' Zeit der SetPixel  & SetPixelV Füllvariante messen
Private Sub Command1_Click(Index As Integer)
  Dim Retval As Long
  Dim StartCur As Currency, EndCur As Currency
  Dim StartInt As ULARGE_INTEGER, EndInt As ULARGE_INTEGER
  Dim i As Long, j As Long
 
  ' Zeit vor dem Beginn der Funktion messen
  Retval = QueryPerformanceCounter(StartInt)
 
  ' Starten der verschiedenen Funktionen
  Select Case Index
  Case 0 ' SetPixel
    For i = 0 To Me.ScaleWidth
      For j = 0 To Me.ScaleHeight
 
        SetPixel Me.hdc, i, j, vbRed
 
      Next j
    Next i
  Case 1 ' SetPixelV
    For i = 0 To Me.ScaleWidth
      For j = 0 To Me.ScaleHeight
 
        SetPixelV Me.hdc, i, j, vbBlue
 
      Next j
    Next i
  End Select
 
  ' Zeit nach dem Beenden der Funktion messen
  Retval = QueryPerformanceCounter(EndInt)
 
  ' Umwandeln der Zeiten in ein Currency-Format
  StartCur = UlargeToCurrency(StartInt)
  EndCur = UlargeToCurrency(EndInt)
 
  MsgBox "Diese aktion dauerte " & CLng((EndCur - StartCur) /  _
  (CounterFreq / 1000)) & " Millisekunden.."
End Sub

Diese Seite wurde bereits 11.469 mal aufgerufen.

nach obenzurück
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel