QtTaskTree::QProcessTaskDeleter Class
class QtTaskTree::QProcessTaskDeleterQProcess 的自定义删除程序,由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 转移到一个单独的线程中,并尝试以最温和的方式结束它。这包括在500 ms 超时的情况下调用QProcess::terminate() ,如果超时后进程仍在运行,则执行QProcess::kill() 的额外调用。
最后,在应用程序退出时,应调用QProcessTaskDeleter::syncAll() 以同步所有仍有可能在单独线程中最终完成的进程。对QProcessTaskDeleter::syncAll() 的调用是阻塞的,以防某些进程仍在最终处理中。
这种策略似乎是明智的,因为通过 QProcessTaskDeleter 删除正在运行的QProcess 时,我们不会立即阻塞,而是将可能(但不确定)的阻塞推迟到应用程序结束。
成员函数文档
[static] void QProcessTaskDeleter::syncAll()
本方法应在应用程序退出时调用,以同步最终确定所有仍在运行的QProcess 实例,这些实例在使用QProcessTaskDeleter 之前已被删除。调用应在主线程中执行。
void QProcessTaskDeleter::operator()(QProcess *process) const
以最安全的方式删除所传递的process 。如果传递的process 没有运行,则直接删除。否则,它会将process 转移到一个单独的线程中,并尝试在500 ms 超时后调用QProcess::terminate() 以最安全的方式完成删除。如果超时后进程仍在运行,则会执行对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.