c++ - condition_variable::wait_for 总是在等待?

标签 c++ c++11

我在单元测试中有一些代码等待我的 vector 足够大:

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;

很简单。除了当我运行这个测试时,我期望在另一个线程上进行这个调用之后,有问题的 vector 应该在毫秒的数量级上填满。也许10ms,也许100ms,肯定在1s之内。但是当我将 5000 作为 millis 参数传递时,此函数总是 等待 5 秒。

一方面,这很好,因为我不在乎这个测试需要多长时间。另一方面,我认为只有在未通知条件变量的情况下才应该等待持续时间……并非总是如此?

有没有办法让它更早返回?

最佳答案

检查您是否确实在 ready 上调用信号或广播。如果您不小心,可能会在实际等待之前发出条件信号(这将导致等待直到超时)。

关于c++ - condition_variable::wait_for 总是在等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18992667/

相关文章:

c++ - 使用 std::bind 时从 std::function 获取函数指针

c++ - 生命周期延长、纯右值和缺值

c++ - 将 vector<string> 转换为 vector<double> 的便捷方法

c++ - 为什么 GDB "next"两次显示构造函数行?

C++/Qt 定义/取消定义 QT_NO_SESSIONMANAGER 宏

c++ - 在 travis 上使用带有 -m32 的 g++ 会导致错误

C++11 chrono 从数字创建 time_point

c++ - 什么时候应该使用智能指针来保存数组?

c# - C++ 到 C# 包装器空异常错误

c++ - 如何打印#define 语句?