建議使用 Visual Studio 2017

condition_variable_any 類別

 

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

使用類別condition_variable_any等候事件擁有任何mutex型別。

class condition_variable_any;

公用建構函式

名稱說明
condition_variable_any:: condition_variable_any 建構函式建構 condition_variable_any 物件。

公用方法

名稱描述
condition_variable_any:: notify_all 方法解除封鎖所有的執行緒正在等待condition_variable_any物件。
condition_variable_any:: notify_one 方法解除封鎖其中一個等候執行緒condition_variable_any物件。
condition_variable_any:: wait 方法封鎖的執行緒。
condition_variable_any:: wait_for 方法封鎖的執行緒,並設定之後,執行緒解除封鎖的時間間隔。
condition_variable_any:: wait_until 方法封鎖執行緒,並設定最大的點的時間,執行緒會解除封鎖。

標頭︰ condition_variable

命名空間: std

建構 condition_variable_any 物件。

condition_variable_any();

備註

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

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

void notify_all() noexcept;

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

void notify_one() noexcept;

封鎖的執行緒。

template <class Lock>  
void wait(
    Lock& Lck);

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

參數

Lck
Amutex任何型別的物件。

Pred
傳回的任何運算式truefalse

備註

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

第二種方法實際上會執行下列程式碼。

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

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

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
Amutex任何型別的物件。

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

Pred
傳回的任何運算式truefalse

傳回值

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

第二個方法傳回的值Pred

備註

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

第二種方法實際上會執行下列程式碼。

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

return true;

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

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
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>

顯示: