Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Użyj klasy condition_variable_any , aby poczekać na zdarzenie, które ma dowolny mutex typ.
Składnia
class condition_variable_any;
Elementy członkowskie
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ł.