【问题标题】:How do I get boost::condition::timed_wait to compile?如何让 boost::condition::timed_wait 编译?
【发布时间】:2010-02-13 20:56:35
【问题描述】:

我想等待一个条件最多 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: 错误:与“运算符+”不匹配 '升压::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 头文件中的模板有关。似乎是在说我没有传递正确的东西,但我就是不明白。

【问题讨论】:

    标签: c++ multithreading 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);
    

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

    [edit] 顺便说一句,你真的应该检查timed_wait 的返回值,否则你将不知道你的条件是否得到了信号,或者发生了超时。 timed_wait 将不会由于超时而抛出![/edit]

    【讨论】:

    • 我实际上在一分钟前就想到了这一点,但你得到了信任。谢谢
    猜你喜欢
    • 2011-10-28
    • 2020-11-17
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 2022-07-15
    • 2011-11-03
    相关资源
    最近更新 更多