Partager via


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.