Rubrik: Datum/Zeit und Timer · Timer | VB-Versionen: VB4, VB5, VB6 | 13.10.04 |
Genaue Zeitmessung im 10.000stel Sekundenbereich Wenn es um eine absolut exakte Zeitmessung im 10.000stel Sekundenbereich geht, hilft dieser Code weiter. | ||
Autor: Dieter Otter | Bewertung: | Views: 27.279 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wenn es um eine absolut exakte Zeitmessung geht, dann sollten Sie sich die API-Funktionen "QueryPerformanceFrequency" und "QueryPerformanceCounter" einmal zu Gemüte führen. Mit diesen beiden Funktionen lässt sich die Zeit nicht im Millisekundenbereich messen, sondern mit einer Genauigkeit einer 10.000stel Sekunde!
Option Explicit ' zunächst die benötigten API-Deklarationen Private Declare Function QueryPerformanceFrequency Lib "kernel32" ( _ lpFrequency As Currency) As Long Private Declare Function QueryPerformanceCounter Lib "kernel32" ( _ lpPerformanceCount As Currency) As Long
' exakte Zeitmessung Public Function TimerEx() As Currency Static nFreq As Currency If nFreq = 0 Then QueryPerformanceFrequency nFreq End If Dim nTimer As Currency QueryPerformanceCounter nTimer TimerEx = nTimer / nFreq End Function
Ein kleines Beispiel:
Es soll die Zeit gemessen werden, die benötigt wird, um in einer ListBox einen neuen Eintrag hinzuzufügen. Die erste Zeitmessung erfolgt mit Hilfe der Timer-Funktion von VB:
Dim nTime As Single nTime = Timer() List1.AddItem "ein neuer Eintrag" Label1.Caption = CStr(Timer - nTime) & " Sekunden"
Als Ergebnis kann hier - je nach Prozessorleistung - durchaus ein negativer Wert angezeigt werden, was ja eigentlich gar nicht sein kann
Die Zeitmessung mit der neuen TimerEx-Funktion hingegen, gibt das richtige Ergebnis zurück:
Dim nTime As Currency nTime = TimerEx() List1.AddItem "ein neuer Eintrag" Label1.Caption = CStr(TimerEx() - nTime) & " Sekunden"