Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verwenden Sie die condition_variable-Klasse, um ein Ereignis zu erwarten, wenn Sie über ein mutex des Typs unique_lock<mutex> verfügen. Objekte dieses Typs haben möglicherweise eine bessere Leistung als Objekte vom Typ condition_variable_any unique_lock Mutex>>.<<
Syntax
class condition_variable;
Member
Konstruktoren
| Name | Beschreibung |
|---|---|
| condition_variable | Erstellt ein condition_variable-Objekt. |
Funktionen
| Name | Beschreibung |
|---|---|
| native_handle | Gibt den implementierungsspezifischen Typ zurück, der das Handle "condition_variable" darstellt. |
| notify_all | Hebt die Blockierung aller Threads auf, die das condition_variable-Objekt erwarten. |
| notify_one | Hebt die Blockierung von einem der Threads, die auf das condition_variable-Objekt warten, auf. |
| wait | Blockiert einen Thread. |
| wait_for | Blockiert einen Thread und legt ein Zeitintervall fest, nachdem die Blockierung des Threads aufgehoben wird. |
| wait_until | Blockiert einen Thread und legt einen maximalen Zeitpunkt fest, an dem die Blockierung des Threads aufgehoben wird. |
condition_variable
Erstellt ein condition_variable-Objekt.
condition_variable();
Hinweise
Wenn nicht genügend Arbeitsspeicher verfügbar ist, gibt der Konstruktor ein system_error-Objekt mit einem not_enough_memory-Fehlercode aus. Wenn das Objekt nicht erstellt werden kann, da eine andere Ressource nicht verfügbar ist, wird vom Konstruktor ein system_error-Objekt mit einem resource_unavailable_try_again-Fehlercode ausgelöst.
native_handle
Gibt den implementierungsspezifischen Typ zurück, der das „condition_variable“-Handle darstellt.
native_handle_type native_handle();
Rückgabewert
native_handle_type wird als Zeiger auf interne Datenstrukturen Concurrency Runtime von Concurrency Runtime definiert.
notify_all
Hebt die Blockierung aller Threads auf, die das condition_variable-Objekt erwarten.
void notify_all() noexcept;
notify_one
Hebt die Blockierung von einem der Threads, die auf das condition_variable-Objekt warten auf.
void notify_one() noexcept;
wait
Blockiert einen Thread.
void wait(unique_lock<mutex>& Lck);
template <class Predicate>
void wait(unique_lock<mutex>& Lck, Predicate Pred);
Parameter
Lck
Ein unique_lock mutex-Objekt>.<
Pred
Jeder gültige Ausdruck, der true oder false zurückgibt.
Hinweise
Die erste Methode sperrt, bis das condition_variable-Objekt durch einen Aufruf von notify_one oder notify_all signalisiert wurde. Sie kann auch falsch aktiviert werden.
Tatsächlich führt die zweite Methode den folgenden Code aus.
while(!Pred())
wait(Lck);
wait_for
Blockiert einen Thread und legt ein Zeitintervall fest, nachdem die Blockierung des Threads aufgehoben wird.
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);
Parameter
Lck
Ein unique_lock mutex-Objekt>.<
Rel_time
Ein chrono::duration-Objekt, das die Zeitdauer vor der Aktivierung des Threads angibt.
Pred
Jeder gültige Ausdruck, der true oder false zurückgibt.
Rückgabewert
Die erste Methode gibt zurück cv_status::timeout , wenn die Wartezeit beendet wird, wenn Rel_time verstrichen ist. Andernfalls gibt diese Methode cv_status::no_timeout zurück.
Die zweite Methode gibt den Wert von Pred zurück.
Hinweise
Die erste Methode blockiert, bis das condition_variable Objekt durch einen Aufruf von notify_one oder notify_all oder bis zum Verstrichen des Zeitintervalls Rel_time signalisiert wird. Sie kann auch falsch aktiviert werden.
Tatsächlich führt die zweite Methode den folgenden Code aus.
while(!Pred())
if(wait_for(Lck, Rel_time) == cv_status::timeout)
return Pred();
return true;
wait_until
Blockiert einen Thread und legt einen maximalen Zeitpunkt fest, an dem die Blockierung des Threads aufgehoben wird.
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);
Parameter
Lck
Ein unique_lock mutex-Objekt>.<
Abs_time
Ein chrono::time_point-Objekt
Pred
Jeder gültige Ausdruck, der true oder false zurückgibt.
Rückgabewert
Methoden, die einen cv_status Typ zurückgeben cv_status::timeout , wenn die Wartezeit beendet wird, wenn Abs_time verstrichen ist. Andernfalls geben diese Methoden cv_status::no_timeout zurück.
Methoden, die einen bool Rückgabewert von Pred zurückgeben.
Hinweise
Die erste Methode blockiert, bis das condition_variable-Objekt durch einen Aufruf von notify_one oder notify_all signalisiert wurde, oder bis Abs_time. Sie kann auch falsch aktiviert werden.
Tatsächlich führt die zweite Methode den folgenden Code aus.
while(!Pred())
if(wait_until(Lck, Abs_time) == cv_status::timeout)
return Pred();
return true;
Bei der dritten und vierten Methode wird einen Zeiger auf ein Objekt des Typs xtime, verwendet, um das chrono::time_point-Objekt zu ersetzen. Mit dem xtime-Objekt wird die maximale Zeit angegeben, die auf ein Signal gewartet wird.