Следующий код воспроизводит ошибку:год находится вне диапазона допустимых значений при прохождении 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
. Я что-то делаю неправильно? Это ошибка, или бесконечные таймауты просто не предназначены?
Невозможно воспроизвести здесь на linux с 1.45.0. Не могли бы вы попробовать, если это исправлено в 1.45.0? – chris
Сначала я установлю его, так что это займет немного времени. –
@chris: Я проверил, и ошибка с 1.45 тоже. –