Метод condition_variable_any::wait_until
Блокирующий поток, и задает максимальный момент времени, в которой поток разблокирует.
template<class Lock, class Clock, class Duration>
void wait_until(
Lock& Lck,
const chrono::time_point<Clock, Duration>& Abs_time);
template<class Lock, class Clock, class Duration, class Predicate>
void wait_until(
Lock& Lck,
const chrono::time_point<Clock, Duration>& Abs_time,
Predicate Pred);
template<class Lock>
void wait_until(
Lock Lck,
const xtime *Abs_time);
template<class Lock, class Predicate>
void wait_until(
Lock Lck,
const xtime *Abs_time,
Predicate Pred);
Параметры
Lck
Объект мьютекса.Abs_time
Объект chrono::time_point.Pred
Любое выражение, которое возвращает true или false.
Возвращаемое значение
Методы, возвращающие возврата cv_status::timeout типа cv_status, если время ожидания завершения при Abs_time истекает. В противном случае методы возвращают cv_status::no_timeout.
Методы, возвращающие возврата bool значение Pred.
Заметки
Первый метод блокируется до объекта condition_variable не просигнализированы вызовом метода notify_one или notify_all, или пока Abs_time. Кроме того, проспать вверх паразитно.
Второй метод фактически выполняет следующий код.
while(!Pred())
if(wait_until(Lck, Abs_time) == cv_status::timeout)
return Pred();
return true;
При третьем и четвертом методы используют указатель на объект типа xtime, чтобы заменить объект chrono::time_point. Объект xtime указывает максимальное количество времени ожидания сигнала.
Требования
Заголовок: condition_variable
Пространство имен: std