将谓词传递给QWaitCondition?

时间:2016-11-06 03:12:56

标签: c++ qt mutex condition-variable

我在Qt中编写了一些线程,我无法弄清楚如何将谓词传递给我的条件变量来防止虚假唤醒。

C ++中的工作解决方案:

std::mutex(mu);
std::condition_variable cond;

std::unique_lock<mutex> alpha_lock(mu);
cond.wait(alpha_lock, [](){ return //some condition;});
alpha_lock.unlock();

//Continue to do stuff...

相当于Qt:

QMutex mu;
QWaitCondition cond;

QMutexLocker alpha_lock&(mu);
cond.wait(&mu, [](){return //some condition;})

错误:

"no matching member function for call to wait"

关于如何在此Qt代码中使用谓词的任何想法?

1 个答案:

答案 0 :(得分:1)

正如编译器和@xaxxon已经指出的那样,wait()中没有这样的QWaitCondition重载。

如果你想在继续之前检查病情,你可以这样做

while (!condition()) {
    cond.wait(mutex);
}

当然,如果你需要更多的地方,你可以把它放到一个帮助函数中,它需要QWaitConditionQMutexstd::function。或者从QWaitCondition派生上面的循环添加重载。