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