# HG changeset patch # User faust3 # Date 1049058437 0 # Node ID 2d703cd325ee271e881731b95026411e5011bdbe # Parent f5c4c9bb9451d1c69100f4804af71e4edfa7276d high precision timer for windows patch by Frodo diff -r f5c4c9bb9451 -r 2d703cd325ee osdep/timer-win.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/osdep/timer-win.c Sun Mar 30 21:07:17 2003 +0000 @@ -0,0 +1,71 @@ +#include +#include +#include +#include +#include + +static LARGE_INTEGER qwTimerFrequency; +static LARGE_INTEGER qwTimerStart; +static LARGE_INTEGER m_lStartTime; +static float m_fuSecsPerTick; +static unsigned long RelativeTime = 0; + +int usec_sleep(int usec_delay) +{ + LARGE_INTEGER qwStartTicks, qwCurrTicks; + double dResult; + long lTick; + double fuSecDelay = ((float) usec_delay) / 1000000.0; + + QueryPerformanceCounter(&qwStartTicks); + do { + QueryPerformanceCounter(&qwCurrTicks); + dResult = + ((double) (qwCurrTicks.QuadPart - qwStartTicks.QuadPart)) / + ((double) (qwTimerFrequency.QuadPart)); + } while (dResult < fuSecDelay); +} + +// Returns current time in microseconds +unsigned long GetTimer() +{ + LARGE_INTEGER qwTime; + FLOAT fTime; + UINT64 uiQuadPart; + + QueryPerformanceCounter(&qwTime); + qwTime.QuadPart -= m_lStartTime.QuadPart; + uiQuadPart = (UINT64) qwTime.QuadPart; + uiQuadPart /= ((UINT64) 10); // prevent overflow after 4294.1 secs, now overflows after 42941 secs + fTime = ((FLOAT) (uiQuadPart)) / m_fuSecsPerTick; + return (unsigned long) fTime; +} + +// Returns current time in microseconds +float GetRelativeTime() +{ + unsigned long t, r; + + t = GetTimer(); + r = t - RelativeTime; + RelativeTime = t; + return (float) r *0.000001F; +} + +// Returns current time in milliseconds +unsigned int GetTimerMS() +{ + return GetTimer() / 1000; +} + +void InitTimer() +{ + FLOAT t; + + QueryPerformanceFrequency(&qwTimerFrequency); // ticks/sec + m_fuSecsPerTick = (FLOAT) (((FLOAT) (qwTimerFrequency.QuadPart)) / 1000.0); // tics/msec + m_fuSecsPerTick = (FLOAT) (m_fuSecsPerTick / 1000.0); // ticks/usec + m_fuSecsPerTick /= 10.0; + QueryPerformanceCounter(&m_lStartTime); + t = GetRelativeTime(); +}