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_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
的任何運算式。
備註
系統會封鎖第一個方法,直到 condition_variable_any
物件收到 notify_one 或 notify_all 的呼叫訊號為止。 它也可能會假性喚醒。
第二種方法則會執行下列程式碼。
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 的值。
備註
第一個方法會封鎖物件,直到condition_variable_any
呼叫 notify_one 或 notify_all,或直到時間間隔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 值的方法。
備註
第一個方法會封鎖物件,直到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
物件可指定等待訊號的時間量上限。