gpt4 book ai didi

c++ - boost::condition_variable.timed_wait 立即返回

转载 作者:行者123 更新时间:2023-11-30 02:08:26 27 4
gpt4 key购买 nike

我正在开发一个小型线程库,但遇到了问题。 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;
}

这是在 sendMessage 之后调用的。接收方收到消息,发送回复,然后调用

waitCondition.notify_all();

最佳答案

条件变量等待可以occasionally result in spurious wakeups .因此,您必须在循环中使用它们:

while (someCondition)
msg->waitCondition.wait(lock);

对于 timed_wait,它会稍微复杂一些,因为您必须重新计算超时以处理它等待的时间。 Boost优惠a variant with a predicate给定一个绝对超时,将为您执行循环:

msg->waitCondition.timed_wait(lock, absoluteTimeout, boost::lambda::var(someFlag));

如果您仍然遇到问题,请检查 mSendTimeout 是否为负数或非常小,并考虑使用绝对超时。

关于c++ - boost::condition_variable.timed_wait 立即返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6877032/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com