我有一个由生产者对象处理的一些硬件的实时数据流。 这会连接到一个消费者,它在它自己的线程中处理它,以保持gui的响应。插槽断开后的Qt信号
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
}
我的问题是,我销毁消费者对象后 - 即使在断开连接后,我仍然会收到张贴的信号。我尝试了一组越来越复杂的互斥体来试图阻止这一点,但理想的解决方案是清理等待所有未完成信号的处理。
有无论如何监测有多少未处理的信号排队等待一个插槽?或者无论如何清除它们?
Unfortunatley的处理涉及一个TCPSocket,它有一个计时器,你不能在定时器中等待的线程上使用deleteLater() – 2012-08-02 14:52:37
我不太明白你的意思。消费者线程是否在QAbstractSocket :: waitFor *上被阻塞? – cgmb 2012-08-02 19:56:05
我得到了一个有关deleteLater和QTimer的警告,他是否连接了socket,我认为它必须是TCP套接字,因为线程中没有使用明确的定时器。 – 2012-08-02 21:07:36