Я работаю над небольшой библиотекой потоков и столкнулся с проблемой.boost :: condition_variable.wait () работает отлично, однако boost :: condition_variable.timed_wait () возвращается немедленно, время не истекает.
В документации сказано, что он должен возвращаться только после истечения времени ожидания илибыли уведомлены.Это три секунды ожидания до уведомления, и я попробовал тайм-ауты 10 и 100 секунд, поэтому он должен вернуться через 3 секунды.
РЕДАКТИРОВАТЬ:
boost::condition_variable waitCondition;
boost::mutex mMutex;
Message MessageClient::waitAsync(Message msg, bool waitForReply) {
unique_lock<boost::mutex> lock(msg->mMutex);
if(mSendTimeout.sec == 0)
msg->waitCondition.wait(lock);
else {
timeout = msg->waitCondition.timed_wait(lock, mSendTimeout);
if(!timeout)
return 0;
if(waitForReply) {
Message reply = receiveMessage();
return reply;
}
else
return 0;
}
Это вызывается послеОтправить сообщение.Получатель получает сообщение, отправляет ответ и затем звонит
waitCondition.notify_all();