condition_variable_any 类
使用类 condition_variable_any
来等待具有任何 mutex
类型的事件。
语法
class condition_variable_any;
成员
构造函数
名称 | 描述 |
---|---|
condition_variable_any | 构造 condition_variable_any 对象。 |
函数
名称 | 描述 |
---|---|
notify_all | 取消阻止正在等待 condition_variable_any 对象的所有线程。 |
notify_one | 取消阻止正在等待 condition_variable_any 对象的某个线程。 |
wait | 阻止线程。 |
wait_for | 阻止某个线程,并设置线程阻止的时间间隔。 |
wait_until | 阻止某个线程,并设置线程阻止的最大时间点。 |
condition_variable_any
构造 condition_variable_any
对象。
condition_variable_any();
注解
如果没有足够的内存,构造函数将抛出包含 not_enough_memory
错误代码的 system_error 对象。 如果由于某些其他资源不可用导致无法构造该对象,则构造函数将抛出包含 resource_unavailable_try_again
错误代码的 system_error
对象。
notify_all
取消阻止正在等待 condition_variable_any
对象的所有线程。
void notify_all() noexcept;
notify_one
取消阻止正在 condition_variable_any
对象上等待的某个线程。
void notify_one() noexcept;
wait
阻止线程。
template <class Lock>
void wait(Lock& Lck);
template <class Lock, class Predicate>
void wait(Lock& Lck, Predicate Pred);
参数
Lck
任何类型的 mutex
对象。
Pred
返回 true
或 false
的任何表达式。
注解
第一种方法进行阻止,直到通过调用 notify_one 或 notify_all 对 condition_variable_any
对象发出信号。 它还可错误唤醒。
第二种方法实际上执行以下代码。
while (!Pred())
wait(Lck);
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
的任何表达式。
返回值
如果在已用 Rel_time 时间时等待终止,则第一种方法返回 cv_status::timeout
。 否则,该方法将返回 cv_status::no_timeout
。
第二种方法返回值 Pred。
备注
第一种方法进行阻止,直到通过调用 notify_one 或 notify_all 对 condition_variable_any
对象发出信号,或直到已用 Rel_time 时间间隔。 它还可错误唤醒。
第二种方法实际上执行以下代码。
while(!Pred())
if(wait_for(Lck, Rel_time) == cv_status::timeout)
return Pred();
return true;
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
Mutex 对象。
Abs_time
chrono::time_point 对象。
Pred
返回 true
或 false
的任何表达式。
返回值
如果在已用 Abs_time 时间时等待终止,则返回 cv_status
类型的方法返回 cv_status::timeout
。 否则,方法返回 cv_status::no_timeout
。
返回 bool
的方法返回值 Pred。
备注
第一种方法进行阻止,直到通过调用 notify_one 或 notify_all 对 condition_variable
对象发出信号,或直到 Abs_time。 它还可错误唤醒。
第二种方法实际上执行以下代码。
while(!Pred())
if(wait_until(Lck, Abs_time) == cv_status::timeout)
return Pred();
return true;
第三种和第四种方法使用指向 xtime
类型的对象的指针来替换 chrono::time_point
对象。 xtime
对象指定等待信号的最大时间。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈