0

在我的代码中,工作线程创建对象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 (object A)。我知道我可以在 WorkerThread 析构函数中添加互斥锁。但有时我收到错误消息,说不应该在没有创建它的线程中删除对象 A。这是否意味着我需要在工作线程中删除 *p ?我如何使它工作?使用另一个信号和插槽?

谢谢,

4

1 回答 1

0

run()如果可能,在线程的函数中创建和销毁对象。

如果对象必须存在于调用线程中(例如 Qt 喜欢小部件存在于主线程上),则在线程对象的构造函数中创建它(或将其传入)并像现在一样在析构函数中删除(假设你的线程完成后将被调用者线程销毁)。

此外,在发出终止信号后,join()删除它之前的线程,以确保它干净地完成。

于 2013-01-16T00:39:10.080 回答