我有来自生产者对象处理的某些硬件的实时数据流。这会连接到在自己的线程中处理它的消费者,以保持 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
}
我的问题是,在我销毁消费者对象之后 - 即使在断开连接之后,我仍然会收到信号。我已经尝试了一组越来越复杂的互斥锁来尝试阻止这种情况,但理想的解决方案是让清理等到所有未处理的信号都被处理完。
有没有办法监控有多少未处理的信号排队等待一个插槽?或者无论如何要清除它们?