condition_variable_any, classe
Utilisez la classe condition_variable_any
pour attendre un événement avec un type mutex
.
Syntaxe
class condition_variable_any;
Membres
Constructeurs
Nom | Description |
---|---|
condition_variable_any | Construit un objet condition_variable_any . |
Functions
Nom | Description |
---|---|
notify_all | Débloque tous les threads qui attendent l’objet condition_variable_any . |
notify_one | Débloque un des threads qui attendent l’objet condition_variable_any . |
wait | Bloque un thread. |
wait_for | Bloque un thread et définit un intervalle de temps après lequel le thread est débloqué. |
wait_until | Bloque un thread et définit un point dans le temps maximal auquel le thread est débloqué. |
condition_variable_any
Construit un objet condition_variable_any
.
condition_variable_any();
Notes
Si la mémoire disponible n’est pas suffisante, le constructeur lève un objet system_error avec le code d’erreur not_enough_memory
. Si l’objet ne peut pas être construit, car une autre ressource n’est pas disponible, le constructeur lève un objet system_error
avec le code d’erreur resource_unavailable_try_again
.
notify_all
Débloque tous les threads qui attendent l’objet condition_variable_any
.
void notify_all() noexcept;
notify_one
Débloque un des threads qui attendent l’objet condition_variable_any
.
void notify_one() noexcept;
wait
Bloque un thread.
template <class Lock>
void wait(Lock& Lck);
template <class Lock, class Predicate>
void wait(Lock& Lck, Predicate Pred);
Paramètres
Lck
Objet mutex
de tout type.
Pred
Toute expression valide qui retourne true
ou false
.
Notes
La première méthode se bloque jusqu’à ce que l’objet condition_variable_any
soit signalé par un appel à notify_one ou notify_all. Elle peut également s’éveiller sans motif.
La deuxième méthode exécute le code suivant.
while (!Pred())
wait(Lck);
wait_for
Bloque un thread et définit un intervalle de temps après lequel le thread est débloqué.
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);
Paramètres
Lck
Objet mutex
de tout type.
Rel_time
Objet chrono::duration
qui spécifie le délai avant l’éveil du thread.
Pred
Toute expression valide qui retourne true
ou false
.
Valeur de retour
La première méthode retourne cv_status::timeout
si l’attente se termine lorsque Rel_time s’est écoulé. Dans le cas contraire, la méthode retourne cv_status::no_timeout
.
La deuxième méthode retourne la valeur de Pred.
Notes
La première méthode se bloque jusqu’à ce que l’objet condition_variable_any
soit signalé par un appel à notify_one ou notify_all, ou jusqu’à ce que l’intervalle de temps Rel_time s’est écoulé. Elle peut également s’éveiller sans motif.
La deuxième méthode exécute le code suivant.
while(!Pred())
if(wait_for(Lck, Rel_time) == cv_status::timeout)
return Pred();
return true;
wait_until
Bloque un thread et définit un point dans le temps maximal auquel le thread est débloqué.
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);
Paramètres
Lck
Objet mutex.
Abs_time
Objet chrono::time_point.
Pred
Toute expression valide qui retourne true
ou false
.
Valeur de retour
Méthodes qui retournent un cv_status
type de retour cv_status::timeout
si l’attente se termine lorsque Abs_time s’écoule. Sinon, les méthodes retournent cv_status::no_timeout
.
Méthodes qui retournent une bool
valeur de retour de Pred.
Notes
La première méthode se bloque jusqu’à ce que l’objet condition_variable
soit signalé par un appel à notify_one ou notify_all, ou jusqu’à Abs_time. Elle peut également s’éveiller sans motif.
La deuxième méthode exécute le code suivant.
while(!Pred())
if(wait_until(Lck, Abs_time) == cv_status::timeout)
return Pred();
return true;
Les troisième et quatrième méthodes utilisent un pointeur vers un objet de type xtime
pour remplacer l’objet chrono::time_point
. L’objet xtime
spécifie le délai d’attente maximal d’un signal.