提升进程间匿名条件timed_wait不可编译

时间:2010-02-20 23:53:38

标签: timeout conditional-statements boost-interprocess

我想知道我做错了什么......只用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->mutexboost::interprocess::interprocess_mutexobj->conditionboost::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)

1 个答案:

答案 0 :(得分:4)

感谢一个好的#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;
}