【发布时间】:2019-07-17 21:59:34
【问题描述】:
所以我在构造函数中有以下代码。
m_someObject = new SomeObject();
m_someObject->moveToThread(&m_thread);
m_thread.start();
connect(&m_thread, &QThread::finished, m_someObject, &QObject::deleteLater);
我在析构函数中有以下代码。
m_thread.terminate();
while (m_thread.isRunning())
{
}
尽管已经完成了连接到m_someObject 的deleteLater 插槽的m_thread,我是否还需要删除m_someObject?
【问题讨论】:
-
是什么让您认为
m_someObject不会被删除?这对我来说看起来不错。 -
因为
m_someObject的析构函数永远不会被调用。 @RickPat -
也许尝试用
m_thread.wait()替换while (m_thread.isRunning()) -
m_thread.terminate();杀死线程。你不应该调用它。文档说明了这一点:警告:此功能很危险,不鼓励使用。线程可以在其代码路径中的任何位置终止。修改数据时可以终止线程。线程没有机会自行清理、解锁任何持有的互斥锁等。简而言之,只有在绝对必要时才使用此功能。 -
true,将代码替换为
m_thread.quit(); m_thread.wait();