将pos_infin作为超时传递给timed_wait时,年份超出有效范围

时间:2011-01-13 10:02:04

标签: c++ boost boost-thread condition-variable boost-date-time

以下代码重现错误:

#include <iostream>
#include "boost/thread.hpp"
#include "boost/date_time/posix_time/ptime.hpp"

int main()
{
    boost::condition_variable_any cv;
    boost::timed_mutex m;

    try {
        {
            boost::timed_mutex::scoped_timed_lock guard(m);
            cv.timed_wait(guard, boost::posix_time::ptime(
                                 boost::posix_time::pos_infin));
        }
    }
    catch(std::exception & e) {
        std::cout << "Error : " << e.what() << std::endl;
    }
    std::cout << "Done" << std::endl;

    return 0;
}

在我的系统上,使用Visual Studio 2005和Boost 1.43,这会产生以下输出:

Error : Year is out of valid range: 1400..10000
Done

我希望它会死锁,等待条件变量通知所有永恒。这似乎没有在任何地方记录,我也希望timed_wait接受任何有效的ptime。我做错了吗?这是一个错误,还是无意的超时?

1 个答案:

答案 0 :(得分:2)

使用boost :: posix_time :: max_date_time,它将按预期工作。