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 インスタンスを高速に破棄するために使用されます。呼び出し元のスレッドの実行を長時間ブロックする可能性がある実行中のQProcess を削除する代わりに、QProcessTaskDeleter は実行中のQProcess を別のスレッドに移動し、最も穏やかな方法でそれを終了しようと試みます。 具体的には、タイムアウト値500 ms を指定してQProcess::terminate()を呼び出し、このタイムアウト時間が経過してもプロセスがまだ実行中の場合は、QProcess::kill()をさらに呼び出します。
最後に、アプリケーションの終了時には、別スレッドでまだ終了処理中の可能性のあるすべてのプロセスを同期させるために、QProcessTaskDeleter::syncAll() を呼び出す必要があります。QProcessTaskDeleter::syncAll() の呼び出しは、一部のプロセスがまだ終了処理中の場合、ブロッキング処理となります。
この戦略は理にかなっているように思われます。なぜなら、QProcessTaskDeleter を通じて実行中のQProcess を削除する際、即座にブロックされるのではなく、発生する可能性のある(ただし確実ではない)ブロックをアプリケーションの終了まで先送りできるからです。
これはQProcessTask によって使用されています。
メンバ関数のドキュメント
[static] void QProcessTaskDeleter::syncAll()
このメソッドは、アプリケーションの終了時に呼び出し、QProcessTaskDeleter を使用する前に削除された、まだ実行中である可能性のあるすべてのQProcess インスタンスのファイナライズを同期させる必要があります。この呼び出しはメインスレッドから実行する必要があります。
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.