Если думал, что
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 системах.📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#константная_правильность