c++ - 如何让 boost::condition::timed_wait 编译?

标签 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: 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/

相关文章:

c++ - 扇出 "arc"的卡片网格

c++ - 从 shared_pointers 映射中填充 vector

c++ - 调用 QObject 的函数移动到 Qt 中的不同线程?

java - 在Java中使用多线程读取数据

c - 在 C 中使用线程时的奇怪行为

c++ - 如何编写返回类型由运行时确定的函数(根据参数的值?)

c++ - 为什么 boost::hana 的集合不能默认构造?

c++ - 有没有办法访问 gettext 在 windows 下使用的语言环境?

c++ - 使用 ofstream 将控制台输出重定向到文件 C++ 的末尾

c++ - "multiple definition of ..."使用arpackpp