Обновленный ответ для C ++ 11:
Используйте функции sleep_for
и sleep_until
:
#include <chrono>
#include <thread>
int main() {
using namespace std::this_thread; // sleep_for, sleep_until
using namespace std::chrono; // nanoseconds, system_clock, seconds
sleep_for(nanoseconds(10));
sleep_until(system_clock::now() + seconds(1));
}
С этими функциями больше нет необходимости постоянно добавлять новые функции для лучшего разрешения: sleep
, usleep
, nanosleep
и т. Д. sleep_for
и sleep_until
- это функции шаблонов, которые могут принимать значения любых разрешение с помощью chrono
типов; часы, секунды, фемтосекунды и т. д.
В C ++ 14 вы можете еще больше упростить код с помощью буквальных суффиксов для nanoseconds
и seconds
:
#include <chrono>
#include <thread>
int main() {
using namespace std::this_thread; // sleep_for, sleep_until
using namespace std::chrono_literals; // ns, us, ms, s, h, etc.
using std::chrono::system_clock;
sleep_for(10ns);
sleep_until(system_clock::now() + 1s);
}
Обратите внимание, что фактическая продолжительность сна зависит от реализации: вы можете попросить перевести в спящий режим на 10 наносекунд, но вместо этого реализация может оказаться в спящем режиме в течение миллисекунды, если это самый короткий период, который она может сделать.