私は少しスレッドライブラリに取り組んでおり、問題に遭遇しました。 boost :: condition_variable.wait()は完全に動作しますが、boost :: condition_variable.timed_wait()はただちに戻りますが、タイムアウトしません。boost :: condition_variable.timed_waitすぐに戻る
ドキュメントでは、タイムアウトが経過するか、通知された後にのみ返されるべきだと書かれています。それは通知の前に3秒待っているので、10秒と100秒の両方のタイムアウトを試したので、3秒後に戻るはずです。
EDIT:
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;
}
これはのsendMessage後に呼び出されます。受信機は、メッセージを取得し、応答を送信し、
waitCondition.notify_all();
十分に、コードが追加されました – dutt