2

次のコードはエラーを再現します。

#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 Studio2005とBoost1.43を使用すると、次の出力が生成されます。

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

条件変数が永遠に通知されるのを待って、デッドロックすることを期待します。timed_waitこれはどこにも文書化されていないようです。また、有効なを受け入れることを期待していますptime。私は何か間違ったことをしていますか?これはバグですか、それとも無限のタイムアウトは意図されていませんか?

4

1 に答える 1

2

boost::posix_time::max_date_time を使用すると、期待どおりに動作します。

于 2011-06-05T10:31:53.557 に答える