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