共用方式為


condition_variable 類別

當您具有 unique_lock<mutex> 類型的 mutex 時,可使用 condition_variable 類別來等候事件。 此類型的物件效能可能比類型condition_variable_any unique_lock<<mutex>> 的物件更好。

語法

class condition_variable;

成員

建構函式

名稱 描述
condition_variable 建構 condition_variable 物件。

函式

名稱 描述
native_handle 傳回代表 condition_variable 控制代碼的實作特定類型。
notify_all 解除封鎖所有等候 condition_variable 物件的執行緒。
notify_one 解除封鎖其中一個等候 condition_variable 物件的執行緒。
封鎖執行緒。
wait_for 封鎖執行緒,並設定要在多久時間間隔之後解除封鎖執行緒。
wait_until 封鎖執行緒,並設定要解除封鎖執行緒的時間點上限。

condition_variable

建構 condition_variable 物件。

condition_variable();

備註

如果可用的記憶體不足,建構函式會擲回具有 not_enough_memory 錯誤碼的 system_error 物件。 如果因為無法使用其他部分資源,而無法建構物件,建構函式會擲回具有 resource_unavailable_try_again 錯誤碼的 system_error 物件。

native_handle

傳回代表 condition_variable 控制代碼的實作特定類型。

native_handle_type native_handle();

傳回值

系統會將 native_handle_type 定義為並行執行階段內部資料結構的指標。

notify_all

解除封鎖所有等候 condition_variable 物件的執行緒。

void notify_all() noexcept;

notify_one

解除封鎖其中一個等候 condition_variable 物件的執行緒。

void notify_one() noexcept;

wait

封鎖執行緒。

void wait(unique_lock<mutex>& Lck);

template <class Predicate>
void wait(unique_lock<mutex>& Lck, Predicate Pred);

參數

Lck
<unique_lock mutex> 物件。

Pred
傳回 truefalse 的任何運算式。

備註

系統會封鎖第一個方法,直到 condition_variable 物件收到 notify_onenotify_all 的呼叫訊號為止。 它也可能會假性喚醒。

而第二種方法會執行下列程式碼。

while(!Pred())
    wait(Lck);

wait_for

封鎖執行緒,並設定要在多久時間間隔之後解除封鎖執行緒。

template <class Rep, class Period>
cv_status wait_for(
    unique_lock<mutex>& Lck,
    const chrono::duration<Rep, Period>& Rel_time);

template <class Rep, class Period, class Predicate>
bool wait_for(
    unique_lock<mutex>& Lck,
    const chrono::duration<Rep, Period>& Rel_time,
    Predicate Pred);

參數

Lck
<unique_lock mutex> 物件。

Rel_time
chrono::duration 物件,指定喚醒執行緒之前的時間。

Pred
傳回 truefalse 的任何運算式。

傳回值

如果等候在經過Rel_time終止,則第一個方法會傳回 cv_status::timeout 。 否則,方法會傳回 cv_status::no_timeout

第二個方法會傳回 Pred 的值

備註

第一個方法會封鎖物件,直到 condition_variable 呼叫 notify_onenotify_all ,或直到時間間隔 Rel_time 經過為止。 它也可能會假性喚醒。

而第二種方法會執行下列程式碼。

while(!Pred())
    if(wait_for(Lck, Rel_time) == cv_status::timeout)
    return Pred();

return true;

wait_until

封鎖執行緒,並設定要解除封鎖執行緒的時間點上限。

template <class Clock, class Duration>
cv_status wait_until(
    unique_lock<mutex>& Lck,
    const chrono::time_point<Clock, Duration>& Abs_time);

template <class Clock, class Duration, class Predicate>
bool wait_until(
    unique_lock<mutex>& Lck,
    const chrono::time_point<Clock, Duration>& Abs_time,
    Predicate Pred);

cv_status wait_until(
    unique_lock<mutex>& Lck,
    const xtime* Abs_time);

template <class Predicate>
bool wait_until(
    unique_lock<mutex>& Lck,
    const xtime* Abs_time,
    Predicate Pred);

參數

Lck
<unique_lock mutex> 物件。

Abs_time
chrono::time_point 物件。

Pred
傳回 truefalse 的任何運算式。

傳回值

如果等候在經過 Abs_time時終止,則傳回cv_status型別的方法會傳cv_status::timeout 。 否則,方法會傳回 cv_status::no_timeout

傳回 bool Pred的方法。

備註

系統會封鎖第一個方法,直到 condition_variable 物件收到 notify_onenotify_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>