プロデューサーオブジェクトによって処理される一部のHWからのリアルタイムデータのストリームがあります。これは、GUIの応答性を維持するために、独自のスレッドで処理するコンシューマーに接続されます。
mainwindow::startProcessing(){
QObject::connect(producer,SIGNAL(dataReady(data*),consumer,SLOT(doData(data*)));
consumer->moveToThread(&consumerThread);
consumerThread.start();
}
mainwindow::stopProcessing(){
producer->disconnect(SIGNAL(dataReady(data*));
consumer->cleanup();
delete consumer;
}
consumer::doData(data* x) {
mutex.lock();
processingObject stuff
mutex.unlock()
}
consumer::cleanup() {
mutex.tryLock();
.... blah ....
delete processingObject; // then doData gets called again
}
私の問題は、コンシューマーオブジェクトを破棄した後でも、切断を行った後でもシグナルが送信されることです。これを停止するために、ますます複雑になるミューテックスのセットを試しましたが、理想的な解決策は、すべての未処理のシグナルが処理されるまでクリーンアップを待機することです。
スロットにキューに入れられている未処理の信号の数を監視する方法はありますか?またはとにかくそれらをクリアするには?