2016-11-06 3 views
0

私はQtにいくつかのスレッドを書いていますが、偽の起床から保護するために、条件変数に述語を渡す方法を理解できません。述語をQWaitConditionに渡すか?

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;}) 

はエラー:このQtのコードで述語を使用する方法について

"no matching member function for call to wait" 

任意のアイデアC++でソリューションをワーキング

+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はすでに指摘しているように、にはwait()オーバーロードはありません。

あなたに行く前の状態をチェックしたい場合は、もちろん、あなたがこの中を必要とする場合QWaitConditionQMutexstd::functionを取るヘルパー関数の中にあることを置くことができ、この

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

ようにそれを行うことができますより多くの場所。または、QWaitConditionから、上のループを実行しているオーバーロードを追加します。