Aracılığıyla paylaş


condition_variable_any Sınıfı

Herhangi mutex bir türe sahip bir olayı beklemek için sınıfını condition_variable_any kullanın.

Sözdizimi

class condition_variable_any;

Üyeler

Oluşturucular

Ad Tanım
condition_variable_any Bir condition_variable_any nesne oluşturur.

İşlevler

Ad Tanım
notify_all Nesneyi bekleyen tüm iş parçacıklarının engelini condition_variable_any kaldırır.
notify_one Nesneyi bekleyen iş parçacıklarından birinin engellemesini condition_variable_any kaldırır.
Bekle İş parçacığını engeller.
wait_for bir iş parçacığını engeller ve iş parçacığının engelini kaldırdığı bir zaman aralığı ayarlar.
wait_until bir iş parçacığını engeller ve iş parçacığının engelini kaldırdığı en yüksek zaman noktasını ayarlar.

condition_variable_any

Bir condition_variable_any nesne oluşturur.

condition_variable_any();

Açıklamalar

Yeterli bellek yoksa, oluşturucu hata kodu içeren not_enough_memory bir system_error nesnesi oluşturur. Başka bir kaynak kullanılamadığından nesne oluşturulamıyorsa, oluşturucu hata koduna sahip bir system_errorresource_unavailable_try_again nesne oluşturur.

notify_all

Nesneyi bekleyen tüm iş parçacıklarının engelini condition_variable_any kaldırır.

void notify_all() noexcept;

notify_one

Nesnede bekleyen iş parçacıklarından birinin engellemesini condition_variable_any kaldırır.

void notify_one() noexcept;

wait

İş parçacığını engeller.

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

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

Parametreler

Lck
mutex Herhangi bir türde bir nesne.

Pred
veya falsedöndüren true herhangi bir ifade.

Açıklamalar

İlk yöntem, nesneye condition_variable_any notify_one veya notify_all çağrısıyla sinyal gelene kadar engeller. Ayrıca mahmuzlu bir şekilde de uyanabilir.

geçerli olan ikinci yöntem aşağıdaki kodu yürütür.

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

wait_for

bir iş parçacığını engeller ve iş parçacığının engelini kaldırdığı bir zaman aralığı ayarlar.

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

Parametreler

Lck
mutex Herhangi bir türde bir nesne.

Rel_time
İş chrono::duration parçacığının uyanmadan önce geçmesi gereken süreyi belirten nesne.

Pred
veya falsedöndüren true herhangi bir ifade.

İade Değeri

İlk yöntem, Rel_time sona erdiğinde beklemenin sona ermesi durumunda döndürürcv_status::timeout. Aksi takdirde yöntemi döndürür cv_status::no_timeout.

İkinci yöntem Pred değerini döndürür.

Açıklamalar

İlk yöntem, notify_one veya notify_all çağrısıyla veya Rel_time zaman aralığıgeçene kadar nesneye sinyal gelene kadar condition_variable_any engeller. Ayrıca mahmuzlu bir şekilde de uyanabilir.

geçerli olan ikinci yöntem aşağıdaki kodu yürütür.

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

return true;

wait_until

bir iş parçacığını engeller ve iş parçacığının engelini kaldırdığı en yüksek zaman noktasını ayarlar.

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

Parametreler

Lck
Bir mutex nesnesi.

Abs_time
Bir chrono::time_point nesnesi.

Pred
veya falsedöndüren true herhangi bir ifade.

İade Değeri

Tür döndüren cv_status yöntemler, Abs_time geçtiğinde bekleme sonlandırıldığında döndürürcv_status::timeout. Aksi takdirde, yöntemleri döndürür cv_status::no_timeout.

Bir döndüren bool yöntemler Pred değerini döndürür.

Açıklamalar

İlk yöntem, notify_one veya notify_all çağrısıyla veya Abs_time kadar nesneye sinyal gelene kadarcondition_variable engeller. Ayrıca mahmuzlu bir şekilde de uyanabilir.

geçerli olan ikinci yöntem aşağıdaki kodu yürütür.

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

return true;

Üçüncü ve dördüncü yöntemler, nesnesini değiştirmek için türünde xtime bir nesneye chrono::time_point yönelik bir işaretçi kullanır. xtime nesnesi, bir sinyalin bek süre üst sınırını belirtir.