建議使用 Visual Studio 2017

condition_variable 類別

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

使用condition_variable類別以等候事件後才mutex型別的unique_lock<mutex>。 此類型的物件可能有較佳的效能比型別的物件condition_variable_any<><>>>

class condition_variable;

公用建構函式

名稱描述
condition_variable:: condition_variable 建構函式建構 condition_variable 物件。

公用方法

名稱說明
condition_variable:: native_handle 方法傳回代表 condition_variable 控制代碼的實作特定類型。
condition_variable:: notify_all 方法解除封鎖所有的執行緒正在等待condition_variable物件。
condition_variable:: notify_one 方法解除封鎖其中一個等候執行緒condition_variable物件。
condition_variable:: wait 方法封鎖的執行緒。
condition_variable:: wait_for 方法封鎖的執行緒,並設定之後,執行緒解除封鎖的時間間隔。
condition_variable:: wait_until 方法封鎖執行緒,並設定最大的點的時間,執行緒會解除封鎖。

標頭︰ condition_variable

命名空間: std

建構 condition_variable 物件。

condition_variable();

備註

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

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

native_handle_type native_handle();

傳回值

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

解除封鎖所有的執行緒正在等待condition_variable物件。

void notify_all() noexcept;

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

void notify_one() noexcept;

封鎖的執行緒。

void wait(
    unique_lock<mutex>& Lck);

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

參數

Lck
A unique_lock<> </> > 物件。

Pred
傳回的任何運算式truefalse

備註

第一個方法會封鎖,直到condition_variable物件收到訊號呼叫notify_onenotify_all。 它可也喚醒 spuriously。

事實上,第二個方法會執行下列程式碼。

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

封鎖的執行緒,並設定之後,執行緒解除封鎖的時間間隔。

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
A unique_lock<> </> > 物件。

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

Pred
傳回的任何運算式truefalse

傳回值

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

第二個方法傳回的值Pred

備註

第一個方法會封鎖,直到condition_variable物件收到訊號呼叫notify_onenotify_all或之前的時間間隔Rel_time過了。 它可也喚醒 spuriously。

事實上,第二個方法會執行下列程式碼。

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

return true;

封鎖執行緒,並設定最大的點的時間,執行緒會解除封鎖。

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
A unique_lock<> </> > 物件。

Abs_time
A chrono:: time_point<steady_clock>物件。

Pred
傳回的任何運算式truefalse

傳回值

方法會傳回cv_status輸入傳回cv_status::timeout則等候會終止時如果Abs_time耗盡。 否則,方法會傳回cv_status::no_timeout

方法會傳回bool傳回的值Pred

備註

第一個方法會封鎖,直到condition_variable物件收到訊號呼叫notify_onenotify_all或直到Abs_time。 它可也喚醒 spuriously。

事實上,第二個方法會執行下列程式碼

while(!Pred())
    if(wait_until(Lck, Abs_time) == cv_status::timeout)
    return Pred();

return true;

第三個和第四個方法都會使用型別的物件的指標xtime取代chrono::time_point物件。 xtime物件指定的最大等待訊號的時間量。

標頭檔參考
<condition_variable></condition_variable>

顯示: