C++ Qt删除稍后的交叉线程

C++ Qt删除稍后的交叉线程,c++,qt,C++,Qt,可以执行以下操作吗 worker->moveToThread(workerthread); ... worker->deleteLater();//this is called from main thread. 工人是否会被正确删除? 我找不到任何Qt文档对此做过任何说明。如果将工作对象移动到线程,并且希望使用信号/插槽连接与工作对象通信,Qt将使用另一个线程上运行的事件循环来发送和接收信号。这就是使用QObject::deleteLater()的原因:它允许在线程中执行对象的某

可以执行以下操作吗

worker->moveToThread(workerthread);
...
worker->deleteLater();//this is called from main thread.
工人是否会被正确删除?
我找不到任何Qt文档对此做过任何说明。

如果将工作对象移动到线程,并且希望使用信号/插槽连接与工作对象通信,Qt将使用另一个线程上运行的事件循环来发送和接收信号。这就是使用QObject::deleteLater()的原因:它允许在线程中执行对象的某个插槽时,按计划安全地删除该对象,保证不会发生这种情况

稍后您可以在Qt中找到有关Delete的更多信息:

计划删除此对象

当控件返回到事件循环时,对象将被删除。如果 调用此函数时,事件循环未运行(例如。 对QCoreApplication::exec()之前的对象调用deleteLater(), 一旦启动事件循环,对象将被删除。如果 deleteLater()在主事件循环停止后调用 对象将不会被删除。从Qt 4.8开始,如果调用deleteLater() 在没有运行事件循环的线程中的对象上 当线程结束时,对象将被销毁

此外,在Qt中,您可以找到deleteLater()的常见用例:

从Qt4.8开始,通过将finished()信号连接到QObject::deleteLater(),可以释放位于刚刚结束的线程中的对象

此问题提供了有关deleteLater()在以下情况中正确使用的不同情况的更多详细信息:。特别是,请参见