我在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已经指出的那样,在wait()
中没有这样的QWaitCondition
重载。
如果您想在继续操作之前检查一下状况,可以这样做
while (!condition()) {
cond.wait(mutex);
}
当然,如果需要在更多地方使用此功能,则可以将其放入需要
QWaitCondition
,QMutex
和std::function
的帮助器函数中。或从QWaitCondition
派生,并在上面的循环中添加过载。