将谓词传递给QWaitCondition

Passing a predicate to QWaitCondition?

本文关键字:QWaitCondition 谓词      更新时间:2023-10-16

我正在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代码中使用谓词的任何想法?

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

如果你想在继续之前检查一个条件,你可以这样做

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

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