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);
        }
Seems pretty accurate to me.