c++ - QObject::deleteLater 跨 QThread

标签 c++ qt

我正在寻找一种解决方案来安排跨线程删除对象。关于 deleteLater 行为方式的文档并不完全清楚。我可以在不是对象所有者的线程中调用此函数吗?

例如,对象 X 由线程 A 拥有,而在线程 B 中我想删除对象 X。由于该对象目前可能在事件处理中(在线程 A 中),在它返回消息循环之前我无法安全地删除它。如果我从线程 B 调用 deleteLater 但是文档似乎表明它会在线程 B 返回消息循环后立即删除。

目前我采用的方法是在线程 A 中发出一个信号,该信号附加到调用 deleteLater 的插槽。我想知道是否有更简单的方法来执行此操作 - 如果确实可以从任何线程调用 deleteLater

最佳答案

查看 Qt 4 codeQt 5 codedeleteLater() 只是调用明确声明为线程安全的QCoreApplication::postEvent()。所以,直接调用它应该没问题。由于事件队列是在对象的所有者线程中处理的,因此删除将发生在线程 A 中。

仅 Qt 5 QObject documentation明确地将 deleteLater() 列为线程安全的。如果您想完全依赖 Qt 4 中记录的行为,请使用 postEvent()

关于c++ - QObject::deleteLater 跨 QThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9632989/

相关文章:

python - 如何打印 QTableView

c++ - 最小化父级时保持 QDialog 打开?

c++ - 在Qt中打开文件

c++ - 如何使 std::vector 类成为一个序列,以便可以将其传递给 boost::hana::group?

c++ - Cython 代码可以编译成 dll 以便 C++ 应用程序可以调用它吗?

c++ - 在 GDAL 中创建 3D shapefile

c++ - 在 QPushButton 上调用另一个小部件应用程序

c++ - 使用 Qt : change StandardPaths used in tested functions 进行单元测试

c++ - 如何重建 android jni c++ 文件(包括 opencv lib)

c++ - 在 switch 语句中将多个案例组合在一起