Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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>