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_error
resource_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 false
dö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 false
dö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 false
dö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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin