Да, WaitForSingleObject использует разрешение тика таймера, он не использует таймер высокого разрешения, такой как QueryPerformanceCounter.
http://msdn.microsoft.com/en-us/library/ms687069(VS.85).aspx, статья MSDN "Функции ожидания" расширяется следующим образом:
Точность указанного тайм-аута
интервал зависит от разрешения
системные часы. Системные часы
«тикает» с постоянной скоростью. Если
интервал ожидания меньше, чем
разрешение системных часов,
время ожидания может истечь меньше чем
указанная продолжительность времени. Если
интервал ожидания больше одного
тик, но меньше двух, ожидание может
быть где-то между одним и двумя тиками,
и так далее.
В этой статье также объясняется, как использовать timeBeginPeriod для увеличения разрешения системных часов, но это не рекомендуется.
Я могу придумать несколько причин, почему. Во-первых, более высокое разрешение не требуется почти во всех случаях использования WaitForSingleObject. Использование таймера с высоким разрешением потребовало бы от ядра постоянно опрашивать таймер (это невозможно, так как код ядра не всегда гарантированно выполняется) или часто перепрограммировать его для генерирования прерывания (поскольку может быть несколько WaitForSingleObjects и, скорее всего, только один программируемое прерывание).
С другой стороны, уже есть источник синхронизации, который постоянно обновляется с разрешением, которое более чем достаточно для WaitForSingleObject, SetWaitableTimer и Sleep.