いくつかのスレッドでアプリケーションを実行しました。stopConsumer
内部で keypressedEventを呼び出すと、すべてが正常に機能するようです。しかし、closeEvent のデストラクタ内で呼び出すと、失敗します。
次のような run メソッドを持つ 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
に到達することはありません。
何か案は?