我想在一个条件下等待长达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头文件中的模板有关。似乎在说我没有传递正确的东西,但我只是不理解它。
答案 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]