sleep_for()/Sleep()/sleep() to nie jest dokładny timer - mówi tylko "uśpij mnie na X czasu i wzbudź gdy będziesz mógł".
https://en.cppreference.com/w/cpp/thread/sleep_for
This function may block for longer than sleep_duration due to scheduling or resource contention delays.
https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-sleep
The system clock "ticks" at a constant rate. If dwMilliseconds is less than the resolution of the system clock, the thread may sleep for less than the specified length of time. If dwMilliseconds is greater than one tick but less than two, the wait can be anywhere between one and two ticks, and so on
Note that a ready thread is not guaranteed to run immediately. Consequently, the thread may not run until some time after the sleep interval elapses.
(zważ też, że jeśli próbujesz używać go cyklicznie jako "zegar", to do czasu "zegara" trzeba doliczyć czas działania Twojego programu)