Увеличаване на междупроцесното анонимно условие timed_wait не може да се компилира

Чудя се какво правя погрешно... с единствен wait се компилира и работи, но не и с timed_wait:

using boost::interprocess::scoped_lock;
using boost::interprocess::interprocess_mutex;
using boost::posix_time::milliseconds;

[...]

scoped_lock<interprocess_mutex> lock(obj->mutex);
while (...) {
   obj->condition.timed_wait(lock, milliseconds(100));
}

където obj->mutex е boost::interprocess::interprocess_mutex и obj->condition е boost::interprocess::interprocess_condition. Ето регистъра на грешките на g++:

code.cpp: In member function ‘[...]’:
code.cpp:42: error: no matching function for call to ‘boost::interprocess::interprocess_condition::timed_wait(boost::interprocess::scoped_lock<boost::interprocess::interprocess_mutex>&, boost::posix_time::milliseconds)

като има предвид, че това е прототипът на членската функция на класа условия (boost/interprocess/sync/interprocess_condition.hpp):

template <typename L, typename Pr>
   bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred)

(повишение 1,40)


person moala    schedule 20.02.2010    source източник


Отговори (1)


Благодарение на един мил #boost IRC потребител (mjcaisse), вече имам представа: timed_wait се нуждае от абсолютно време.

bool noTimeout = true;
boost::system_time timeout = boost::get_system_time() + milliseconds(10);
while (!noTimeout && [CONDITION NOT MET])
{
   noTimeout = obj->condition.timed_wait(lock, timeout);
}

if (!noTimeout)
{
   std::cout << "timeout!" << std::endl;
}
person moala    schedule 21.02.2010