Я пытаюсь использовать timed_wait
от наддува. Теперь я на самом деле не совсем уверен, как это сделать.
Цель всего этого - определить его состояние. В приведенном ниже коде вызывается функция getStatus()
. Эта функция асинхронная, и если все прошло правильно, она вызывает специальную функцию обратного вызова, чтобы указать, что все в порядке. Если он не вызывает обратный вызов во времени (поэтому происходит таймаут), я знаю, что что-то пошло не так.
Так вот пример кода:
void myClass::checkStatus()
{
boost::mutex::scoped_lock lock(m_Mutex);
boost::condition_variable cond;
while(true)
{
getStatus(); // Async Call to get the actual status
if(!cond.timed_wait(lock,boost::posix_time::milliseconds(3000),/* Callback */))
{
// Timeout
}
else
{
// OK
}
}
}
bool myClass::myCallback()
{
/* ... */
}
Итак, как вы можете видеть, я не знаю, как правильно «добавить» обратный вызов в мой timed_wait. На самом деле я не понимаю, как это будет работать, поскольку я ожидаю, что мой Callback будет вызываться из моего асинхронного потока, а не из самого timed_wait
? (Асинхронный поток должен сигнализировать, что все прошло хорошо)
Я также заглянул в документацию по ускорению 1014 *, но это не могло мне помочь.
По второму вопросу: мой мьютекс в этом примере всегда заблокирован?