Как получить 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]

Другие вопросы по тегам