Функция sleep_until
Функция sleep_until приостанавливает
выполнение текущего потока до наступления
указанного момента времени. В параметр
функции мы передаем момент времени, до
которого поток должен быть приостановлен.
Функция объявлена в заголовочном файле
<thread> и доступна начиная со
стандарта C++11.
В отличие от sleep_for, которая
принимает длительность паузы, sleep_until
принимает абсолютный момент времени, до
которого следует спать. Если указанный
момент уже прошел, функция возвращает
управление немедленно.
Синтаксис
template <class Clock, class Duration>
void sleep_until(const chrono::time_point<Clock, Duration>& sleep_time);
Параметр sleep_time задает момент
времени, до которого поток должен быть
приостановлен.
Пример
Давайте приостановим выполнение потока
на 2 секунды, используя текущий
момент времени плюс длительность:
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
int main()
{
auto start = chrono::system_clock::now();
auto wake = start + chrono::seconds(2);
cout << "Start" << endl;
this_thread::sleep_until(wake);
cout << "Wake up" << endl;
return 0;
}
Результат выполнения кода:
"Start"
"Wake up"
Пример
Давайте приостановим поток до конкретного
момента времени, заданного через
time_point с часами
steady_clock:
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
int main()
{
auto start = chrono::steady_clock::now();
auto wake = start + chrono::milliseconds(500);
cout << "Before sleep" << endl;
this_thread::sleep_until(wake);
cout << "After sleep" << endl;
return 0;
}
Результат выполнения кода:
"Before sleep"
"After sleep"
Смотрите также
-
функция
sleep_for,
которая приостанавливает поток на заданную длительность -
класс
time_point,
который представляет момент времени -
класс
system_clock,
который представляет системные часы -
класс
steady_clock,
который представляет монотонные часы