Seems pretty accurate to me.Code:bool Thread::Sleep(unsigned long dwMilli) throw() { unsigned long long qwCurrent(0),qwPrevious(0),qwDifference(0),qwTicksPast(0); const unsigned long long nFrequency = GetTicksInSecond(); // Uses QueryPerformanceFrequency const unsigned long long nTicksInMilli = nFrequency / 1000; const unsigned long long nMilliTicks = nTicksInMilli * dwMilli; qwCurrent = GetCurrentTicks(); // Uses QueryPerformanceCounter do { qwPrevious = qwCurrent; qwCurrent = GetCurrentTicks(); qwDifference = qwCurrent - qwPrevious; qwTicksPast += qwDifference; if (qwTicksPast >= nMilliTicks) { break; } } while (true); }




Reply With Quote