condition_variable::wait_for 总是在等待
condition_variable::wait_for always waits?
我在单元测试中有一些代码,可以等到我的向量足够大:
bool waitForOutwardMessages(size_t size, int millis) {
std::unique_lock<std::mutex> lock(mutex);
return ready.wait_for(lock, std::chrono::milliseconds(millis), [=]{
return this->messages.size() >= size;
});
}
std::mutex mutex;
std::condition_variable ready;
足够简单。除了当我运行此测试时,我希望在另一个线程上进行此调用后,有问题的向量应该以毫秒的数量级填充。也许 10 毫秒,也许 100 毫秒,肯定在 1 秒内。但是当我传入 5000 作为millis
参数时,这个函数总是等待 5 秒。
一方面,这很好,因为我不在乎这个测试需要多长时间。另一方面,我认为只有在条件变量未收到通知的情况下,它才应该等待持续时间......不总是如此?
有没有办法让它早点回来?
检查您是否确实在呼叫信号或在ready
上广播。如果你不小心,在你实际等待之前可以发出信号,可能会有一场比赛(这将导致等到超时(。
相关文章:
- 在等待时破坏condition_variable
- 工作线程一直在等待,condition_variable甚至调用了notify_all
- 为什么condition_variable在等待生产者-消费者的锁定?C++
- 仅在等待 20 秒后更新数据库记录,以便可以接收最大记录
- Java本机接口-C 不在等待Java功能完成
- 如果其他人在等待,是否有标准的STL或QT方法可以产生互惠码,否则请保留它
- QSslSocket 在等待数据时超时(但 QTcpSocket 不会)
- 我如何在源代码中找到仍在等待的被破坏线程
- 如何停止C 程序在等待条件时关闭时崩溃
- 如果condition_variable::wait_for-delay参数在等待过程中发生更改,该怎么办
- 如何在等待时取消"提升::ASIO::读取"操作
- BlockingQueue 的 QWaitCondition:在线程仍在等待时销毁
- MySQL Windows c api 命名管道错误:"在'等待初始通信数据包'时丢失与 MySQL 服务器的连接,系统错误:0
- 在等待输入时执行无限循环
- QWaitCondition:在线程仍在等待时已销毁
- C++/QT/OpenMP:访问同一实例时,线程似乎在等待
- 线程池卡在等待状态
- condition_variable::wait_for 总是在等待
- 如何在等待程序启动混乱/ GTK+时制作加载/介绍动画弹出窗口
- Boost::interprocess::interprocess_condition::wait在等待时不会自动解锁互