Хотя на самом деле я делаю чуть хитрее. Я не жду вбланк, а жду некой линии развертки, примерно линий за 100 до вбланк'а (с отдачей квантов другим задачам по 1мс кусочкам), после чего забираю все быстродействие на себя, таким образом могу очень точно отловить приход вбланка.
У Windows Sleep работает на аппаратных прерываниях 10 мс. Так что вызвав Sleep(1), назад управление можно получить и через 10 мс. А это практически время развертки целого кадра (1/75=13мс), о каком отслеживании VBlank в таких условиях можно говорить?