【发布时间】:2013-03-05 23:35:54
【问题描述】:
有两个类:Widget 和 Worker。这是一个示意图代码。
class Widget
{
Worker *m_worker;
QTextEdit *m_edit;
public:
Widget():m_edit(new QTextEdit){}
~Widget()
{
m_worker->ShouldStop = true;
delete *m_worker;
}
void doWork()
{
m_worker = new Worker;
if (!worker->doWork())
m_edit->setText("failed");
}
}
class Worker
{
Worker() : ShouldStop(false){}
public:
bool ShouldStop;
bool doWork()
{
while(true && !ShouldStop)
{
QThread::sleep(1);
QApplication::processEvents();
}
//consider the work undone if a stop was forced
if (ShouldStop)
return false;
}
}
在调用Widget 的doWork() 之后,在Worker 的方法doWork() 中执行循环。然后关闭一个小部件并在调用processEvents() 期间调用它的析构函数。然后执行然后返回到Worker 的doWork()。
它现在检查ShouldStop 并返回到Widget 的doWork() 并尝试向m_edit 添加一些内容。但是Widget 对象已经死了。
问题:
- 如何彻底删除 Worker?
- 避免这种相互作用的最佳设计是什么?
【问题讨论】:
标签: c++ qt signals-slots qt5