私のコードでは、ワーカー スレッドがオブジェクト A を作成し、メイン スレッド クラス B のデストラクタがワーカー スレッドのデストラクタを呼び出し、オブジェクト A がワーカー スレッドのデストラクタで削除されます。コードは次のようになります。
WorkerThread::foo() {
Object *p = new Object;
}
WorkerThread::~WorkerThread {
delete p;
wait();
}
B::~B() {
emit signal();
//this signal is to ask worker thread to quit,
//the signal/slot connection is connect(this, SIGNAL), mWorkerThread, SLOT));
delete mWorkerThread;
}
ここでの問題は、ワーカー スレッドの他の関数がまだ *p (オブジェクト A) を使用している可能性があることです。WorkerThread デストラクタにミューテックスを追加できることはわかっています。しかし、オブジェクト A を作成していないスレッドでオブジェクト A を削除してはならないというエラー メッセージが表示されることがあります。これは、ワーカー スレッドで *p を削除する必要があるということですか? どうすれば機能しますか?別の信号とスロットを使用しますか?
ありがとう、