HighRes - Timer
Verfasst: 21.12.2008 18:22
Da ElapsedMilliseconds ziemlich ungenau ist (wie schon öfter hier diskutiert) hab ich mir anhand einiger Code-Snippets aus dem Board ein Include für einen HighRes Timer geschrieben.
Einfach einbinden und statt ElapsedMilliseconds() immer GetTimeMS() verwenden, sollte keine Probleme geben.
Einfach einbinden und statt ElapsedMilliseconds() immer GetTimeMS() verwenden, sollte keine Probleme geben.
Code: Alles auswählen
; ------------------------------------------------------------------------------------
; HighRes - Timer
; PB 4.x
; Alexander Aigner
;
; Funktionen:
;
; GetTimeMS()
; ------------------------------------------------------------------------------------
Prototype.l HR_Time()
; ------------------------------------------------------------------------------------
; Interne Variablen
; ------------------------------------------------------------------------------------
Structure _HR_Internal
TicksPerSecond.l
Frequency.q
StartTime.q
EndStructure
Define _HR._HR_Internal
Global GetTimeMS.HR_Time
; ------------------------------------------------------------------------------------
; Interne Proceduren
; ------------------------------------------------------------------------------------
Procedure.l _HR_InitTime()
Shared _HR._HR_Internal
With _HR
If Not QueryPerformanceFrequency_(@\Frequency)
ProcedureReturn 0
Else
QueryPerformanceCounter_(@\StartTime)
\TicksPerSecond = 1000 ; 1000 = Millisekunden
ProcedureReturn 1
EndIf
EndWith
EndProcedure
Procedure.l _HR_Get()
Shared _HR._HR_Internal
Protected currentTime.q
With _HR
QueryPerformanceCounter_(@currentTime.q)
ProcedureReturn (currentTime-\StartTime)*\TicksPerSecond/\Frequency
EndWith
EndProcedure
Procedure _HR_oldPC_or_Linux()
ProcedureReturn ElapsedMilliseconds()
EndProcedure
; ------------------------------------------------------------------------------------
; Initialisierung
; ------------------------------------------------------------------------------------
CompilerIf #PB_Compiler_OS <> #PB_OS_Windows
GetTimeMS = @_HR_oldPC_or_Linux()
CompilerElse
If _HR_InitTime()
GetTimeMS = @_HR_Get()
Else
GetTimeMS = @_HR_oldPC_or_Linux()
EndIf
CompilerEndIf