我已经用一些线程完成了一个应用程序。stopConsumer
如果我将我的内部称为 keypressedEvent ,一切似乎都可以正常工作。但是如果我在 closeEvent 的析构函数中调用它......它会失败。
我的 QThread 类具有这样的运行方法:
void Consumer::run()
{
forever {
// do something something
// do something something
// do something something
//-------------------------------- check for abort
abortMutex.lock();
if(abort) {
abortMutex.unlock();
qDebug() << "abort..";
break;
} abortMutex.unlock();
//-------------------------------- check for abort
}
qDebug() << "Consumer > emit finished()";
emit finished();
}
void Consumer::stopConsume() {
abortMutex.lock();
abort = true;
abortMutex.unlock();
}
和 MainWindow 中的一个方法:
void initConsumers()
{
consumer1 = new Consumer(....);
connect(consumer1, SIGNAL(finished()),
this, SLOT(deleteConsumer()));
consumer1->start();
}
void stopConsumer() {
if(consumer1!=NULL) {
qDebug() << "stopConsumer";
consumer1->stopConsume();
}
}
如果我有一个按键调用stopConsumer
.. 没关系,deleteConsumer
已到达。
如果我stopConsumer
在 MainWindow 析构函数内或 MainWindow 内调用closeEvent
.. 永远不会到达插槽deleteConsumer
!
有任何想法吗?