我想等待一个条件最多 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: 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,当我使用 wait 时,代码编译和运行正常,但错误消息似乎与解析 boost 头文件中的模板有关。好像在说我没有传递正确的东西,但我就是不明白。
最佳答案
我认为这是参数顺序。
因为我从来没有遇到过 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);
持续时间实际上是第二个参数,而不是第三个。
[edit] 顺便说一句,你真的应该检查 timed_wait
的返回值,否则你将不知道你的条件是否得到了信号,或者是否发生了超时。 timed_wait
将不会由于超时而抛出![/edit]
关于c++ - 如何让 boost::condition::timed_wait 编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2259025/