Sdílet prostřednictvím


condition_variable_any – třída

condition_variable_any Třída slouží k čekání na událost, která má libovolný mutex typ.

Syntaxe

class condition_variable_any;

Členové

Konstruktory

Název Popis
condition_variable_any condition_variable_any Vytvoří objekt.

Funkce

Název Popis
notify_all Odblokuje všechna vlákna, která čekají na condition_variable_any objekt.
notify_one Odblokuje jedno z vláken, která čekají na condition_variable_any objekt.
Počkej Blokuje vlákno.
wait_for Zablokuje vlákno a nastaví časový interval, po kterém se vlákno odblokuje.
wait_until Zablokuje vlákno a nastaví maximální bod v čase, ve kterém se vlákno odblokuje.

condition_variable_any

condition_variable_any Vytvoří objekt.

condition_variable_any();

Poznámky

Pokud není k dispozici dostatek paměti, konstruktor vyvolá system_error objekt, který má not_enough_memory kód chyby. Pokud objekt nelze vytvořit, protože některý jiný prostředek není k dispozici, konstruktor vyvolá system_error objekt, který má resource_unavailable_try_again kód chyby.

notify_all

Odblokuje všechna vlákna, která čekají na condition_variable_any objekt.

void notify_all() noexcept;

notify_one

Odblokuje jedno z vláken čekajících na condition_variable_any objekt.

void notify_one() noexcept;

wait

Blokuje vlákno.

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

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

Parametry

Lck
Objekt mutex libovolného typu.

Před
Libovolný výraz, který vrací true nebo false.

Poznámky

První metoda blokuje, dokud condition_variable_any objekt není signalován voláním notify_one nebo notify_all. Může se také vzbudit nechtěně.

Druhá metoda, která se projeví, spustí následující kód.

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

wait_for

Zablokuje vlákno a nastaví časový interval, po kterém se vlákno odblokuje.

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

Parametry

Lck
Objekt mutex libovolného typu.

Rel_time
Objekt chrono::duration , který určuje dobu, po kterou se vlákno probudí.

Před
Libovolný výraz, který vrací true nebo false.

Návratová hodnota

První metoda vrátí cv_status::timeout , pokud čekání skončí, když Rel_time uplynula. V opačném případě metoda vrátí cv_status::no_timeout.

Druhá metoda vrátí hodnotu pred.

Poznámky

První metoda blokuje, dokud condition_variable_any objekt není signalován voláním notify_one nebo notify_all nebo do uplynutí časového intervalu Rel_time . Může se také vzbudit nechtěně.

Druhá metoda, která se projeví, spustí následující kód.

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

return true;

wait_until

Zablokuje vlákno a nastaví maximální bod v čase, ve kterém se vlákno odblokuje.

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

Parametry

Lck
Objekt mutex.

Abs_time
Chrono ::time_point objekt.

Před
Libovolný výraz, který vrací true nebo false.

Návratová hodnota

Metody, které vracejí cv_status typ return cv_status::timeout , pokud čekání skončí, když Abs_time uplynula. V opačném případě metody vrátí cv_status::no_timeout.

Metody, které vrátí bool hodnotu pred.

Poznámky

První metoda blokuje, dokud condition_variable objekt není signalován voláním notify_one nebo notify_all nebo do Abs_time. Může se také vzbudit nechtěně.

Druhá metoda, která se projeví, spustí následující kód.

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

return true;

Třetí a čtvrté metody používají ukazatel na objekt typu xtime k nahrazení objektu chrono::time_point . Objekt xtime určuje maximální dobu čekání na signál.