Sdílet prostřednictvím


condition_variable – třída

condition_variable Třída slouží k čekání na událost, pokud máte mutex typ unique_lock<mutex>. Objekty tohoto typu mohou mít lepší výkon než objekty typu condition_variable_any unique_lock mutex>>.<<

Syntaxe

class condition_variable;

Členové

Konstruktory

Název Popis
condition_variable condition_variable Vytvoří objekt.

Funkce

Název Popis
native_handle Vrátí typ specifický pro implementaci představující popisovač condition_variable.
notify_all Odblokuje všechna vlákna, která čekají na condition_variable objekt.
notify_one Odblokuje jedno z vláken, která čekají na condition_variable 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

condition_variable Vytvoří objekt.

condition_variable();

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.

native_handle

Vrátí typ specifický pro implementaci, který představuje popisovač condition_variable.

native_handle_type native_handle();

Návratová hodnota

native_handle_type je definován jako ukazatel na interní datové struktury Concurrency Runtime.

notify_all

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

void notify_all() noexcept;

notify_one

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

void notify_one() noexcept;

wait

Blokuje vlákno.

void wait(unique_lock<mutex>& Lck);

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

Parametry

Lck
Objekt unique_lock<mutex> .

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

Poznámky

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

Ve výsledku druhá metoda 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 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);

Parametry

Lck
Objekt unique_lock<mutex> .

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

Ve výsledku druhá metoda 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 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);

Parametry

Lck
Objekt unique_lock<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ě.

Ve výsledku druhá metoda 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.

Viz také

Referenční informace k souborům hlaviček
<condition_variable>