- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个小型线程库,但遇到了问题。 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/
我创建了一个使用 Executor 框架的程序。我创建了一个定期调度的单个线程。 这里是相同的完整源代码: package com.example; import java.security.Secu
我有一个线程转储,其中有: "http-9443-67" daemon prio=10 tid=0x00007f1d5c37e800 nid=0x10331 runnable [0x00007f1d5
我有一个简单的程序,其中包含触发一些计算的计划任务。 在流程结束时,仍然有很多TIMED_WAITING和WAITING队列,这是我没想到的。 Compute Executor terminated:
我在 Linux 操作系统 + ARM 处理器 + boost 1.51 上运行以下代码。但是,代码没有按预期工作,timed_wait() 调用立即返回。 #include #include #
当在具有持续时间的 boost::condition_variable 上使用 timed_wait 时,等待条件是否会在持续时间后超时,即使用户(或 ntp)更改了系统时间? 例如, boost::
我正在阅读我的 STL 实现(标准问题 g++ 4.6.2)并在 condition_variable 中遇到了这种竞争条件: template cv_status wait_for(unique_l
我正在尝试了解如何使用 timed_wait。我只找到了几个例子( here 和 here )并且在用绝对时间调用它时遇到了问题。下面的代码是一个简化的例子,实际上这一切都发生在一个类中,所以我认为手
我正在开发一个小型线程库,但遇到了问题。 boost::condition_variable.wait() 完美运行,但是 boost::condition_variable.timed_wait()
boost documentation说: Returns: false if the call is returning because the time specified by abs_time
有人有如何最轻松地使用 boost::condition::timed_wait 的示例吗?该主题有一些线程here , here和 here ,但没有一个具有工作示例。而且 boost doc 像往
我们的 tomcat 没有响应任何请求。当我使用“jstack pid”打印堆栈信息时,我得到了以下信息。我发现它在“Thread.sleep(long)”上被阻止。我认为应该是“TIMED_WAIT
我有以下代码来启动 netty 服务器: Application application = ApplicationTypeFactory.getApplication(type);
我想等待一个条件最多 1 秒。我尝试传入 time_duration: boost::posix_time::time_duration td = boost::posix_time::millise
我有 Spring 和 Quartz 作业(集群)定期运行(1 分钟)。当服务器启动时,一切似乎都很好,但一段时间后不会触发作业。重新启动服务器使作业运行,但一段时间后问题再次出现。 我怀疑这是一个线
Java Spring Boot 应用程序请求处于挂起状态,因为线程处于 WAITING 和 TIMED_WAITING 状态。 Jstack 日志: "qtp886341817-1399" #139
以下代码重现了错误: #include #include "boost/thread.hpp" #include "boost/date_time/posix_time/ptime.hpp" int
我们一直在监控 tomcat 7 中的线程,最近我们开始发现线程数有时会变成正常值的两倍,即大约 200 个线程(而不是通常的大约 80 个线程)。 进行线程转储后,我看到在线程数量增加期间,由于存在
例子: boost::interprocess::interprocess_semaphore semDone(0); long sec = 10; boost::posix_time::ptime
我们目前有很多如下形式的代码: boost::xtime t; boost::xtime_get (&t, POV_TIME_UTC); t.sec += 3 ; m_Event.timed_wait
最近我们的一个生产 tomcat 服务器变得没有响应,因为 tomcat 的繁忙线程激增到 200。当我们在重新启动之前进行线程转储时,我们有 100 个线程处于 TIMED_WAITING 状态,就
我是一名优秀的程序员,十分优秀!