如何编译boost :: condition :: timed_wait?

时间:2010-02-13 20:56:36

标签: c++ multithreading boost

我想在一个条件下等待长达1秒钟。我试着传递time_duration:

boost::posix_time::time_duration td = boost::posix_time::milliseconds(50);
readerThread_cond_.timed_wait(lock, boost::bind(&XXXX::writeCondIsMet, this), td);

但是我收到了错误:

  

/usr/include/boost/thread/pthread/condition_variable.hpp:156:   错误:不匹配'operator +'   'boost :: get_system_time()+   wait_duration”

我也试过传递xtime:

boost::xtime t;
boost::xtime_get(&t, boost::TIME_UTC);
readerThread_cond_.timed_wait(lock, boost::bind(&XXXX::writeCondIsMet, this), td);

但是我收到了错误:

我正在使用libboost_thread和libboost_date_time进行链接,当我使用wait时,代码编译并运行正常,但错误消息似乎与解析boost头文件中的模板有关。似乎在说我没有传递正确的东西,但我只是不理解它。

1 个答案:

答案 0 :(得分:1)

我认为这是争论的顺序。

由于我从未遇到过timed_wait的问题,我在the boost reference to boost.thread, condition_variable_any, timed_wait处查看了一些细节。我觉得最有趣的是:

template<typename lock_type,typename duration_type,typename predicate_type>
bool timed_wait(lock_type& lock,duration_type const& rel_time,predicate_type predicate);

持续时间实际上是第二个参数,而不是第三个参数。

[编辑] BTW,你真的应该检查timed_wait的返回值,否则你不会知道你是否已经发出信号,或者发生了超时。由于超时,timed_wait投掷![/ edit]