Усилить анонимное условие межпроцессного timed_wait не компилируется
Мне интересно, что я делаю не так... с подошвой wait
он компилируется и запускается, но не с timed_wait
:
using boost::interprocess::scoped_lock;
using boost::interprocess::interprocess_mutex;
using boost::posix_time::milliseconds;
[...]
scoped_lock<interprocess_mutex> lock(obj->mutex);
while (...) {
obj->condition.timed_wait(lock, milliseconds(100));
}
где obj->mutex
это boost::interprocess::interprocess_mutex
а также obj->condition
это boost::interprocess::interprocess_condition
, Вот журнал ошибок g++:
code.cpp: In member function ‘[...]’:
code.cpp:42: error: no matching function for call to ‘boost::interprocess::interprocess_condition::timed_wait(boost::interprocess::scoped_lock<boost::interprocess::interprocess_mutex>&, boost::posix_time::milliseconds)
тогда как это прототип функции-члена класса условия (boost / interprocess / sync / interprocess_condition.hpp):
template <typename L, typename Pr>
bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred)
(повышение 1.40)
1 ответ
Решение
Благодаря хорошему пользователю IRC#boost (mjcaisse), теперь у меня есть подсказка: timed_wait нужно абсолютное время.
bool noTimeout = true;
boost::system_time timeout = boost::get_system_time() + milliseconds(10);
while (!noTimeout && [CONDITION NOT MET])
{
noTimeout = obj->condition.timed_wait(lock, timeout);
}
if (!noTimeout)
{
std::cout << "timeout!" << std::endl;
}