Udostępnij za pośrednictwem


condition_variable_any — Klasa

Użyj klasy condition_variable_any , aby poczekać na zdarzenie, które ma dowolny mutex typ.

Składnia

class condition_variable_any;

Członkowie

Konstruktory

Nazwa/nazwisko opis
condition_variable_any condition_variable_any Tworzy obiekt.

Funkcje

Nazwa/nazwisko opis
Notify_all Odblokuje wszystkie wątki oczekujące na condition_variable_any obiekt.
notify_one Odblokuje jeden z wątków oczekujących na condition_variable_any obiekt.
Czekać Blokuje wątek.
wait_for Blokuje wątek i ustawia interwał czasu, po którym wątek zostanie odblokowany.
wait_until Blokuje wątek i ustawia maksymalny punkt w czasie, w którym wątek jest odblokowywany.

condition_variable_any

condition_variable_any Tworzy obiekt.

condition_variable_any();

Uwagi

Jeśli za mało pamięci jest dostępna, konstruktor zgłasza obiekt system_error , który zawiera not_enough_memory kod błędu. Jeśli nie można skonstruować obiektu, ponieważ inny zasób jest niedostępny, konstruktor zgłasza system_error obiekt, który zawiera resource_unavailable_try_again kod błędu.

Notify_all

Odblokuje wszystkie wątki oczekujące na condition_variable_any obiekt.

void notify_all() noexcept;

notify_one

Odblokuje jeden z wątków oczekujących na condition_variable_any obiekt.

void notify_one() noexcept;

wait

Blokuje wątek.

template <class Lock>
void wait(Lock& Lck);

template <class Lock, class Predicate>
void wait(Lock& Lck, Predicate Pred);

Parametry

Lck
mutex Obiekt dowolnego typu.

Pred
Dowolne wyrażenie zwracające true wartość lub false.

Uwagi

Pierwsza metoda blokuje, dopóki condition_variable_any obiekt nie zostanie zasygnalizowany przez wywołanie notify_one lub notify_all. Może również obudzić się złudnie.

Druga metoda w efekcie wykonuje następujący kod.

while (!Pred())
    wait(Lck);

wait_for

Blokuje wątek i ustawia interwał czasu, po którym wątek zostanie odblokowany.

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);

Parametry

Lck
mutex Obiekt dowolnego typu.

Rel_time
chrono::duration Obiekt, który określa czas, po jakim wątek się obudzi.

Pred
Dowolne wyrażenie zwracające true wartość lub false.

Wartość zwracana

Pierwsza metoda zwraca cv_status::timeout wartość, jeśli oczekiwanie zakończy się po upływie Rel_time . W przeciwnym razie metoda zwraca cv_status::no_timeoutwartość .

Druga metoda zwraca wartość Pred.

Uwagi

Pierwsza metoda blokuje, dopóki condition_variable_any obiekt nie zostanie zasygnalizowany przez wywołanie notify_one lub notify_all albo do czasu upływu przedziału czasu Rel_time . Może również obudzić się złudnie.

Druga metoda w efekcie wykonuje następujący kod.

while(!Pred())
    if(wait_for(Lck, Rel_time) == cv_status::timeout)
    return Pred();

return true;

wait_until

Blokuje wątek i ustawia maksymalny punkt w czasie, w którym wątek jest odblokowywany.

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);

Parametry

Lck
Obiekt mutex.

Abs_time
Obiekt chrono::time_point .

Pred
Dowolne wyrażenie zwracające true wartość lub false.

Wartość zwracana

Metody zwracające cv_status typ zwracają wartość cv_status::timeout , jeśli oczekiwanie zakończy się po upływie Abs_time . W przeciwnym razie metody zwracają wartość cv_status::no_timeout.

Metody zwracające bool wartość Pred.

Uwagi

Pierwsza metoda blokuje, dopóki condition_variable obiekt nie zostanie zasygnalizowany przez wywołanie notify_one lub notify_all lub do momentu Abs_time. Może również obudzić się złudnie.

Druga metoda w efekcie wykonuje następujący kod.

while(!Pred())
    if(wait_until(Lck, Abs_time) == cv_status::timeout)
    return Pred();

return true;

Trzecie i czwarte metody używają wskaźnika do obiektu typu xtime w celu zastąpienia chrono::time_point obiektu. Obiekt xtime określa maksymalny czas oczekiwania na sygnał.