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_any-Klasse, um ein Ereignis mit jeglichem mutex-Typ zu erwarten.
Syntax
class condition_variable_any;
Member
Konstruktoren
| Name | Beschreibung |
|---|---|
| condition_variable_any | Erstellt ein condition_variable_any-Objekt. |
Funktionen
| Name | Beschreibung |
|---|---|
| notify_all | Hebt die Blockierung aller Threads auf, die das condition_variable_any-Objekt erwarten. |
| notify_one | Hebt die Blockierung von einem der Threads, die auf das condition_variable_any-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_any
Erstellt ein condition_variable_any-Objekt.
condition_variable_any();
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.
notify_all
Hebt die Blockierung aller Threads auf, die das condition_variable_any-Objekt erwarten.
void notify_all() noexcept;
notify_one
Hebt die Blockierung von einem der Threads, die auf das condition_variable_any-Objekt warten auf.
void notify_one() noexcept;
wait
Blockiert einen Thread.
template <class Lock>
void wait(Lock& Lck);
template <class Lock, class Predicate>
void wait(Lock& Lck, Predicate Pred);
Parameter
Lck
Ein mutex-Objekt jeglichen Typs.
Pred
Jeder gültige Ausdruck, der true oder false zurückgibt.
Hinweise
Die erste Methode sperrt, bis das condition_variable_any-Objekt durch einen Aufruf von notify_one oder notify_all signalisiert wurde. Sie kann auch falsch aktiviert werden.
Die zweite Methode führt tatsächlich 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 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);
Parameter
Lck
Ein mutex-Objekt jeglichen Typs.
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_any Objekt durch einen Aufruf von notify_one oder notify_all signalisiert wird, oder bis das Zeitintervall Rel_time verstrichen ist. Sie kann auch falsch aktiviert werden.
Die zweite Methode führt tatsächlich 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 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);
Parameter
Lck
Ein 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 oder bis Abs_time signalisiert wird. Sie kann auch falsch aktiviert werden.
Die zweite Methode führt tatsächlich 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.