2010-02-13 51 views
1

我想等待条件达1秒钟。我已经尝试传递TIME_DURATION:如何获得boost :: condition :: timed_wait来编译?

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: error: no match for ‘operator+’ in ‘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链接,代码编译并运行正常,当我使用只是使用等待,但错误信息似乎与解决boost头文件中的模板有关。这似乎是说我没有通过正确的事情,但我只是不明白这一点。

回答

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); 

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

[编辑]顺便说一句,你真的应该检查timed_wait的返回值,否则你不会知道的条件是否你有信号,或出现超时。 timed_wait不是由于超时抛出![/编辑]

+0

我其实在一分钟前计算出来,但你得到的功劳。谢谢 – 2010-02-13 21:45:04