Как получить boost :: condition :: timed_wait для компиляции? - PullRequest
1 голос
/ 13 февраля 2010

Я хочу ждать в состоянии до 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 / включать / импульс / нить / нитей / 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 Ответ

1 голос
/ 14 февраля 2010

Я думаю, что это порядок аргументов.

Поскольку у меня никогда не было проблем с 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]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...