2016-11-06 87 views
0

我正在寫一些線程在Qt中,我不知道如何將謂詞傳遞給我的條件變量,以防止虛假喚醒。將謂詞傳遞給QWaitCondition?

工作液在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代碼使用謂詞任何想法?

+2

哪裏可以看到任何可以將回調傳遞給QaitCondition的文檔?我沒有看到任何東西。 http://doc.qt.io/qt-5/qwaitcondition.html我猜你只是在一個while循環中包裝它。 while(!condition_to_test)qtwaitcondition.wait(); – xaxxon

+0

真正的問題是:既然你有一個使用標準C++的工作解決方案,爲什麼要通過轉碼來使用Qt來限制自己?有沒有理由不能使用你的工作C++解決方案? – IInspectable

+0

@IInspectable這是一個桌面應用程序,因此使用Qt契約確保完全跨平臺兼容 –

回答

1

由於編譯器和@xaxxon已經指出,在QWaitCondition中沒有這樣的wait()過載。

如果你想在繼續之前,你可以做這樣的

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

你當然也可以將它放入一個輔助功能,需要一個QWaitConditionQMutexstd::function如果需要此辦理登機手續的條件更多的地方。或者從QWaitCondition派生出來,加上做循環的重載。