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