Как получить boost::condition::timed_wait для компиляции?
Я хочу ждать в состоянии до 1 секунды. Я пытаюсь передать в time_duration:
boost::posix_time::time_duration td = boost::posix_time::milliseconds(50);
readerThread_cond_.timed_wait(lock, boost::bind(&XXXX::writeCondIsMet, this), td);
но я получаю ошибку:
/usr/include/boost/thread/pthread/condition_variable.hpp:156: ошибка: нет совпадения с оператором + в boost::get_system_time() + wait_duration '
Я также попытался передать xtime:
boost::xtime t;
boost::xtime_get(&t, boost::TIME_UTC);
readerThread_cond_.timed_wait(lock, boost::bind(&XXXX::writeCondIsMet, this), td);
но я получаю ошибку:
Я связываюсь с libboost_thread и libboost_date_time, и код компилируется и запускается нормально, когда я использую только wait, но сообщение об ошибке, похоже, связано с разрешением шаблонов в файлах заголовка boost. Кажется, я говорю, что не правильно понимаю, но просто не понимаю.
1 ответ
Я думаю, что это порядок аргументов.
Поскольку у меня никогда не было проблем с timed_wait
Я посмотрел на некоторые детали ссылки на повышение для boost.thread, condition_variable_any, timed_wait. Что я считаю наиболее интересным, так это:
template<typename lock_type,typename duration_type,typename predicate_type>
bool timed_wait(lock_type& lock,duration_type const& rel_time,predicate_type predicate);
Время-продолжительность на самом деле является вторым аргументом, а не третьим.
[править] Кстати, вы действительно должны проверить возвращаемое значение timed_wait
, иначе вы не будете знать, поступило ли вам условие или произошел тайм-аут. timed_wait
не скину из-за тайм-аута![/edit]