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.
Definuje třídy condition_variable a condition_variable_any , které slouží k vytváření objektů, které čekají na splnění podmínky.
Tato hlavička používá Concurrency Runtime (ConcRT), abyste ji mohli používat společně s dalšími mechanismy ConcRT. Další informace o ConcRT naleznete v tématu Concurrency Runtime.
Požadavky
Header:<condition_variable>
Obor názvů: std
Poznámka:
V kódu, který je zkompilován pomocí /clr, je tato hlavička blokována.
Poznámky
Kód, který čeká na proměnnou podmínky, musí také použít mutexznak . Volající vlákno musí uzamknout mutex před voláním funkcí, které čekají na proměnnou podmínky. Je mutex pak uzamčen, když volá funkce vrátí. Není mutex uzamčen, dokud vlákno čeká na splnění podmínky. Aby nedošlo k nepředvídatelným výsledkům, musí každé vlákno, které čeká na proměnnou podmínky, používat stejný mutex objekt.
Objekty typu condition_variable_any lze použít s mutexem libovolného typu. Typ mutexu, který se používá, nemusí poskytnout metodu try_lock . Objekty typu condition_variable lze použít pouze s mutex typu unique_lock<mutex>. Objekty tohoto typu mohou být rychlejší než objekty typu condition_variable_any<unique_lock<mutex>>.
Pokud chcete počkat na událost, nejprve uzamkněte mutex a potom zavolejte jednu z wait metod proměnné podmínky. Volání wait blokuje, dokud jiný vlákno nes signalizuje proměnnou podmínky.
Spurious wakeups nastane, když vlákna čekající na proměnné podmínky se odblokují bez odpovídajících oznámení. Pokud chcete rozpoznat takové nepravdivé probuzení, kód, který čeká na splnění podmínky, by měl explicitně zkontrolovat tuto podmínku, když se kód vrátí z funkce čekání. To se obvykle provádí pomocí smyčky; tuto smyčku můžete provést wait(unique_lock<mutex>& lock, Predicate pred) za vás.
while (condition is false)
wait for condition variable;
condition_variable Třídy condition_variable_any mají tři metody, které čekají na podmínku.
waitčeká na nevázané časové období.wait_untilčeká na zadanétime.wait_forčeká na zadanoutime interval.
Každá z těchto metod má dvě přetížené verze. Jeden jen čeká a může se vzbudit nechtěně. Druhý přebírá další argument šablony, který definuje predikát. Metoda nevrací, dokud predikát není true.
Každá třída má také dvě metody, které slouží k upozorňovat proměnnou podmínky, že její podmínka je true.
notify_oneprobudí jedno z vláken, které čekají na proměnnou podmínky.notify_allprobudí všechna vlákna, která čekají na proměnnou podmínky.
Funkce a výčty
void notify_all_at_thread_exit(condition_variable& cond, unique_lock<mutex> lk);
enum class cv_status { no_timeout, timeout };
Viz také
Referenční informace k souborům hlaviček
condition_variable – třída
condition_variable_any – třída