【发布时间】:2017-03-19 15:25: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 代码中使用谓词的任何想法?
【问题讨论】:
-
您在哪里可以看到可以将回调传递给 QaitCondition 的任何文档?我什么也没看到。 doc.qt.io/qt-5/qwaitcondition.html 我猜你只是将它包装在一个while循环中。 while (!condition_to_test) qtwaitcondition.wait();
-
真正的问题是:既然你有一个使用标准 C++ 的工作解决方案,你为什么要通过转码来限制自己使用 Qt?您是否有理由无法使用您的 C++ 解决方案?
-
@IInspectable 这是一个桌面应用程序,因此使用 Qt 合约来确保完全跨平台兼容
-
Qt 肯定不比标准 C++ 更便携。如果有的话,那就是反过来了。使用标准 C++ 可确保您可以为任何平台编译程序,只要有符合标准的 C++ 编译器。
-
@IInspectable 一个区别是 Qt 的线程类也可用于不支持 C++11 的编译器。
标签: c++ qt mutex condition-variable