Just for the record...
Depending on Sleep() delivering an accurate sleep time is a very bad idea. The scheduler is under no obligation whatsoever to give clock cycles to a thread just because it has come out of a sleep state. In addition to that, the default resolution of Sleep is rather low. It can be manipulated with timeBeginPeriod and timeEndPeriod but, it's better and simpler to use the API it uses internally (NtSetTimerResolution)
IOW, Sleep is _not_ a way to influence the O/S' scheduler.
In the best case, in a system that is running _very_ smoothly (and _not_ running some version of Win 10 or newer), its accuracy is roughly 1ms (that's in the very best case.) Starting with some version of Win 10, its accuracy is lower, usually in the order of 2 ms (again, in the very best case.) I know because, I didn't just read MS' documented wet dreams, I've tested Sleep many, many times.