我如何获得提振::状态:: TIMED_WAIT编译?(How do I get boost::co

2019-09-28 03:24发布

我想在条件最多等待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:错误:在没有比赛的 '运营商+' '的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链接和代码编译,当我使用只是用等待运行正常,但似乎错误消息有关解决升压头文件的模板。 这似乎是说我没有传递正确的事,但我就是不明白。

Answer 1:

我认为它的参数顺序。

正如我从来没有一个问题timed_wait ,我看了一些细节在升压参考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 不会抛出由于超时![/编辑]



文章来源: How do I get boost::condition::timed_wait to compile?