This is my conversion attempt, but I'm sure it won't compile under Linux/Mac OSX as I don't know the correct units to include for those platforms:
What do you guys/gals think?Code:unit xeEngine_timer; interface {$I xeEngine_include.inc} procedure Timer_Init; cdecl; // initialize timer (like constructor) procedure Timer_Start; cdecl; // start timer procedure Timer_Stop; cdecl; // stop the timer function Timer_GetElapsedTime: Double; cdecl; // get elapsed time in second function Timer_GetElapsedTime_Sec: Double; cdecl; // get elapsed time in second (same as getElapsedTime) function Timer_GetElapsedTime_mSec: Double; cdecl; // get elapsed time in milli-second function Timer_GetElapsedTime_uSec: Double; cdecl; // get elapsed time in micro-second implementation uses {$ifdef windows} windows {$endif} ; var startTimeInMicroSec : Double; // starting time in micro-second endTimeInMicroSec : Double; // ending time in micro-second stopped : Boolean; // stop flag {$ifdef windows} frequency : Int64; // ticks per second startCount : Int64; // endCount : Int64; // {$else} startCount : timeval; // endCount : timeval // {$endif} procedure Timer_Init; begin {$ifdef windows} QueryPerformanceFrequency(frequency); startCount := 0; endCount := 0; {$else} startCount.tv_sec := 0; startCount.tv_usec := 0; endCount.tv_sec := 0; endCount.tv_usec := 0; {$endif} stopped := False; startTimeInMicroSec := 0; endTimeInMicroSec := 0; end; procedure Timer_Start; begin stopped := False; // reset stop flag {$ifdef windows} QueryPerformanceCounter(startCount); {$else} gettimeofday(startCount, nil); {$endif} end; procedure Timer_Stop; begin stopped := True; // set timer stopped flag {$ifdef windows} QueryPerformanceCounter(endCount); {$else} gettimeofday(endCount, NULL); {$endif} end; function Timer_GetElapsedTime: Double; begin Result := Timer_GetElapsedTime_Sec; end; function Timer_GetElapsedTime_Sec: Double; begin Result := Timer_GetElapsedTime_uSec * 0.000001; end; function Timer_GetElapsedTime_mSec: Double; begin Result := Timer_GetElapsedTime_uSec * 0.001; end; function Timer_GetElapsedTime_uSec: Double; begin {$ifdef windows} if not stopped then QueryPerformanceCounter(endCount); startTimeInMicroSec := startCount * (1000000.0 / frequency); endTimeInMicroSec := endCount * (1000000.0 / frequency); {$else} if not stopped then gettimeofday(endCount, nil); startTimeInMicroSec := (startCount.tv_sec * 1000000.0) + startCount.tv_usec; endTimeInMicroSec := (endCount.tv_sec * 1000000.0) + endCount.tv_usec; {$endif} Result := endTimeInMicroSec - startTimeInMicroSec; end; end.
cheers,
Paul
Bookmarks