本页内容

QtTaskTree::QProcessTaskDeleter Class

class QtTaskTree::QProcessTaskDeleter

一个用于QProcess 的自定义删除工具,由QProcessTask 使用。更多内容...

标题: #include <qprocesstask.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS TaskTree)
target_link_libraries(mytarget PRIVATE Qt6::TaskTree)
qmake: QT += tasktree
自: Qt 6.11
状态: 技术预览

该类处于技术预览阶段,内容可能会有变动。

注意:本类中的所有函数均为可重入函数。

公共函数

void operator()(QProcess *process) const

静态公共成员

void syncAll()

详细说明

QProcessTaskDeleter 用于通过QTaskTree 中的QProcessTask 快速销毁正在运行的QProcess 实例。QProcessTaskDeleter 不会直接删除正在运行的QProcess (这可能会长时间阻塞调用者的线程执行),而是将正在运行的QProcess 移至一个单独的线程中,并尝试以最温和的方式将其结束。 具体操作包括调用QProcess::terminate()并设置500 ms 超时;若超时后进程仍在运行,则会额外调用QProcess::kill()。

最后,在应用程序退出时,应调用QProcessTaskDeleter::syncAll(),以同步所有可能仍在单独线程中被终结的进程。如果某些进程仍在被终结,对QProcessTaskDeleter::syncAll()的调用将处于阻塞状态。

这种策略似乎很合理,因为当通过 QProcessTaskDeleter 删除正在运行的QProcess 时,我们不会立即阻塞,而是将可能(但并非必然)发生的阻塞推迟到应用程序结束时。

该策略由QProcessTask 采用。

成员函数文档

[static] void QProcessTaskDeleter::syncAll()

应在应用程序退出时调用此方法,以同步处理所有可能仍在运行的、且在使用 `QProcessTaskDeleter` 之前已被删除的 `QProcess ` 实例的终结过程。该调用应从主线程执行。

void QProcessTaskDeleter::operator()(QProcess *process) const

以最安全的方式删除传入的process 。如果传入的process 未在运行,则直接将其删除。否则,将process 移至单独的线程中,并通过调用QProcess::terminate()(设置超时时间为500 ms )尝试以最安全的方式终止该进程;如果超时后进程仍在运行,则会额外调用QProcess::kill()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.