Giriş
Bu sınıf üzerinde kaç tane thread'in beklediğini belirten bir metod sunmuyor. Java'da bu tür metodlar var.
Constructor
Şöyle yaparız.
notify_one metodu
Şöyle yaparız.
Bu sınıf üzerinde kaç tane thread'in beklediğini belirten bir metod sunmuyor. Java'da bu tür metodlar var.
Constructor
Şöyle yaparız.
boost::condition_variable c;
Şöyle yaparız.
c.notify_one();
wait metodu
Açıklaması şöyle. UTC saat kullanılmalı.
Use boost::get_system_time() + dt, which is UTC-based, instead of local_time() + dt, which is timezone-adjusted, because wait_lock(...) uses boost::get_system_time() to compare current time with the target absolute time.
Şöyle yaparız.
boost::posix_time::time_duration dt = ...;
boost::mutex::scoped_lock lock (mutex);
boost::system_time x = boost::get_system_time () + dt;
bool timedOut = false;
while((done == false) && (x > boost::posix_time::get_system_time())) {
timedOut = ! cond.timed_wait(lock,x);
}
wait_until metodu
İmzası şöyle.
Şöyle yaparız.
İmzası şöyle.
bool wait_until(unique_lock<mutex>& lock,const chrono::time_point<Clock, Duration>& t,
Predicate pred);
Metodun için şöyle.template <class Clock, class Duration, class Predicate>
bool wait_until(unique_lock<mutex>& lock,const chrono::time_point<Clock, Duration>& t,
Predicate pred)
{
while (!pred())
{
if (wait_until(lock, t) == cv_status::timeout)
return pred();
}
return true;
}
ÖrnekŞöyle yaparız.
#include <boost/thread.hpp>
#include <iostream>
int main()
{
boost::mutex m;
boost::condition_variable cv;
boost::unique_lock<boost::mutex> lk(m);
if (cv.wait_until(lk,
boost::chrono::high_resolution_clock::now() + boost::chrono::seconds(1),
[] { return false; }))
{
std::cout << "Yay\n";
} else {
std::cout << "Nay\n";
}
}
Hiç yorum yok:
Yorum Gönder