🐾 Почему std::this_thread::sleep_for не гарантирует точную паузу? — 22 мая 2026 г. в 17:00:01.270
🐾 Почему std::this_thread::sleep_for не гарантирует точную паузу? Если думал, что sleep_for(100ms) остановит поток ровно на 100 мс, то это не так. На деле — это минимальное время ожидания, не точное. Когда ты вызываешь std::this_thread::sleep_for, происходит следующее: поток переводится в состояние WAITING в планировщике ОС. Ядро ставит таймер и убирает поток из очереди на исполнение. Когда таймер срабатывает, поток не просыпается мгновенно — он попадает обратно в ready queue и ждёт, пока планировщик выделит ему квант времени. auto start = std::chrono::steady_clock::now(); std::this_thread::sleep_for(std::chrono::milliseconds(100)); auto elapsed = std::chrono::steady_clock::now() - start; // elapsed может быть 102ms, 115ms, даже 130ms ⚡️ На Linux гранулярность таймера по умолчанию — около 1–4 мс (зависит от CONFIG_HZ). На Windows — исторически 15.6 мс, если не вызвать timeBeginPeriod(1) 💡 Если нужна точность ниже миллисекунды — ОС-пауза не подойдёт. Для таких задач используют spin-wait с std::chrono::high_resolution_clock, жертвуя CPU ради точности. 🐸 Учитывай это при реализации любого setPause-подобного механизма в game loop или real-time системах.

