共用方式為


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
傳回 truefalse 的任何運算式。

備註

系統會封鎖第一個方法,直到 condition_variable_any 物件收到 notify_onenotify_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
傳回 truefalse 的任何運算式。

傳回值

如果等候在經過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
傳回 truefalse 的任何運算式。

傳回值

如果等候在經過 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 物件可指定等待訊號的時間量上限。