2

Следующий код воспроизводит ошибку:год находится вне диапазона допустимых значений при прохождении pos_infin, как тайм-аут, чтобы timed_wait

#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 и увеличить 1.43, это производит следующий вывод:

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

Я ожидаю, что он закроется, ожидая, что переменная состояния будет уведомляться на всю вечность. Это нигде не документировано, и я ожидал бы, что timed_wait примет любые действительные ptime. Я что-то делаю неправильно? Это ошибка, или бесконечные таймауты просто не предназначены?

+0

Невозможно воспроизвести здесь на linux с 1.45.0. Не могли бы вы попробовать, если это исправлено в 1.45.0? – chris

+0

Сначала я установлю его, так что это займет немного времени. –

+0

@chris: Я проверил, и ошибка с 1.45 тоже. –

ответ

2

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