Год выходит за допустимый диапазон при передаче pos_infin в качестве тайм-аута timed_wait - PullRequest
2 голосов
/ 13 января 2011

Следующий код воспроизводит ошибку:

#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 Ответ

2 голосов
/ 05 июня 2011

Используйте boost :: posix_time :: max_date_time, и все будет работать как положено.

...