QtTaskTree::QThreadFunction Class
template <typename ResultType> class QtTaskTree::QThreadFunctionQtConcurrent::run() を通じて、別のスレッドで関数の実行を制御するクラステンプレートです。詳細...
| ヘッダー: | #include <qthreadfunctiontask.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS TaskTree) target_link_libraries(mytarget PRIVATE Qt6::TaskTree) |
| qmake: | QT += tasktree |
| 以下のように: | Qt 6.11 |
| 継承元: | QtTaskTree::QThreadFunctionBase |
| ステータス: | テクノロジープレビュー |
このクラスはテクノロジープレビュー段階にあり、変更される可能性があります。
注:このクラスのすべての関数は再入可能です。
パブリック関数
| QThreadFunction(QObject *parent = nullptr) | |
| virtual | ~QThreadFunction() override |
| QFuture<ResultType> | future() const |
| QFutureWatcher<ResultType> * | futureWatcher() |
| const QFutureWatcher<ResultType> * | futureWatcher() const |
| bool | isAutoDelayedSync() const |
| bool | isDone() const |
| bool | isResultAvailable() const |
| ResultType | result() const |
| ResultType | resultAt(int index) const |
| QList<ResultType> | results() const |
| void | setAutoDelayedSync(bool on) |
| void | setThreadFunctionData(Function &&function, Args &&... args) |
| void | setThreadPool(QThreadPool *pool) |
| ResultType | takeResult() const |
| QThreadPool * | threadPool() const |
詳細な説明
QThreadFunction は便利なクラステンプレートであり、ResultType は格納された関数の戻り値の型を指定します。このクラスは、後で QtConcurrent::run() を通じて呼び出される格納された関数と、関数の実行を監視する内部のQFutureWatcher を組み合わせたものです。QThreadFunctionTask を使用して、QTaskTree レシピ内で QThreadFunction を実行します。
setThreadFunctionData() メソッドを使用して、引数付き関数を別のスレッドで実行するように設定します。
別のスレッドで実行中の関数内部からエラーを報告するには、その関数内でQPromise<ResultType> &promise 引数を最初の引数として渡し、プロミスのフューチャーをキャンセルします。例:
static void copyFile(QPromise<void> &promise, const QString &source,
const QString &destination)
{
const QFileInfo fi(source);
if (!fi.exists()) {
promise.future().cancel(); // The QThreadFunction finishes with DoneResult::Error
return;
}
// Copy file...
}
QThreadFunction<void> task;
task.setThreadFunctionData(copyFile, "source.txt", "dest.txt");
task.start();setThreadPool() を使用すると、指定したQThreadPool で関数を実行できます。これを使用しない場合、関数はglobal thread pool を使用します。
setAutoDelayedSync() を使用して、自動遅延同期を切り替えます。
関数の実行を制御するには、関連するfutureWatcher()のシグナルに接続します。出力データを取得するには、result()、resultAt()、またはresults()のゲッターを使用します。
メンバ関数のドキュメント
[implicit] QThreadFunction::QThreadFunction(QObject *parent = nullptr)
指定されたparent を用いて、QThreadFunctionを構築します。
[override virtual] QThreadFunction::~QThreadFunction()
QThreadFunction を破棄します。QThreadFunction が実行されていない場合は、それ以上の処理は行われません。実行されている場合は、関連付けられたフューチャーがキャンセルされ、自動遅延同期の設定に応じて、以下の処理が行われます:
| 自動遅延同期 | アクション |
|---|---|
| 有効時 | 関連するQFuture はグローバルレジストリに格納されます。アプリケーションの終了時にはQThreadFunctionBase::syncAll() を使用して、以前にグローバルレジストリに格納されたすべてのフューチャーを同期させてください。 |
| オフ | QFuture::waitForFinished() へのブロッキング呼び出しが直接実行されます。 |
自動遅延同期がオンの場合、フューチャーのキャンセルは、別のスレッドでまだ実行中の関数内でインターセプトされる可能性があるため、その関数は処理を完了せずに、できるだけ早く終了してしまうことがあります。
最後に、アプリケーションの終了時には、別スレッドでまだ実行されている可能性のあるすべての関数を同期させるために、QThreadFunctionBase::syncAll() を呼び出す必要があります。一部の関数がまだファイナライズ処理中の場合、QThreadFunctionBase::syncAll() の呼び出しはブロッキングとなります。
注: 自動遅延同期がオンの場合 、QThreadFunction のデストラクタが終了した後も、関数はしばらくの間実行され続けます。そのため、関数が操作する可能性のあるすべてのデータが引き続き利用可能であることを確認するのは、ユーザーの責任となります。これを保証できない場合は、QThreadFunction::setAutoDelayedSync(false) を使用して、自動遅延同期をオフに設定してください。 この場合、QThreadFunction のデストラクタは、QThreadFunction を削除する前に、関数が終了するまでブロックして待機します。Deleter テンプレートパラメータの詳細については、QCustomTask のドキュメントを参照してください。
setAutoDelayedSync() およびsyncAll()も参照してください 。
QFuture<ResultType> QThreadFunction::future() const
別のスレッドで実行された関数に関連付けられたQFuture<ResultType>を返します。
QFutureWatcher<ResultType> *QThreadFunction::futureWatcher()
別のスレッドで実行された関数に関連付けられたQFutureWatcher<ResultType> へのポインタを返します。返されるウォッチャーのライフタイムは、QThreadFunction インスタンスに紐付けられています。
将来の実行をより細かく制御する必要がある場合、たとえば、返されたウォッチャーの進行状況シグナルに接続する場合などに、この関数を使用します。
const QFutureWatcher<ResultType> *QThreadFunction::futureWatcher() const
別のスレッドで実行された関数に関連付けられたQFutureWatcher<ResultType> へのconst ポインタを返します。
これはオーバーロードされた関数です。
bool QThreadFunction::isAutoDelayedSync() const
自動遅延同期が有効かどうかを返します。
syncAll() およびsetAutoDelayedSync()も参照してください 。
bool QThreadFunction::isDone() const
関数の実行が完了したかどうかを返します。
bool QThreadFunction::isResultAvailable() const
結果の準備が整っているかどうかを返します。
result()も参照してください 。
ResultType QThreadFunction::result() const
別のスレッドで実行された関数によって報告された ResultType を返します。
注: isResultAvailable() を呼び出して結果の準備が整っていることを確認してください 。そうしないと、結果がまだ報告されていない場合、result() の呼び出しがブロックされる可能性があります。また、関数の実行が終了しても結果が報告されていない場合は、クラッシュする可能性があります。
QFutureWatcher::result()も参照してください 。
ResultType QThreadFunction::resultAt(int index) const
index で別スレッドで実行された関数によって報告された ResultType を返します。
result() およびQFutureWatcher::resultAt()も参照してください 。
QList<ResultType> QThreadFunction::results() const
別のスレッドで実行された関数から報告された ResultType のリストを返します。
result()、resultAt()、およびQFuture::results()も参照してください 。
void QThreadFunction::setAutoDelayedSync(bool on)
自動遅延同期を `on` に設定します。
デフォルトでは、自動遅延同期が有効になっており、実行中のQThreadFunction オブジェクトの破棄は、別のスレッドで実行中の関数が終了するまでブロックして待機することはありません。その代わりに、関連付けられたQFuture はキャンセルされ、関数は終了するまで実行され続けます。 このキャンセル処理は、QPromise 引数を通じて別のスレッドで実行中の関数によってインターセプトされる可能性があるため、その関数は処理を完了せずに早期に終了してしまう可能性があります。自動遅延同期が有効な場合、別のスレッドで実行中のすべての関数を同期させるために、アプリケーションの終了時にQThreadFunctionBase::syncAll()を呼び出す必要があります。
自動遅延同期がオフの場合、同期はQThreadFunction の破棄時に実行されるため、呼び出し元スレッドが相当な時間ブロックされる可能性があります。
自動同期は、QThreadFunction がメインスレッドから実行された場合にのみ使用されます。
syncAll() およびisAutoDelayedSync()も参照してください 。
template <typename Function, typename... Args> void QThreadFunction::setThreadFunctionData(Function &&function, Args &&... args)
start() が呼び出された際に、渡された `args ` を使用して、function を別のスレッドで実行するように設定します。
QtConcurrent::run()も参照してください 。
void QThreadFunction::setThreadPool(QThreadPool *pool)
呼び出しの実行時に使用するQThreadPool pool を設定します。渡されたpool がnullptr の場合、QThreadPool::globalInstance()が使用されます。
threadPool()も参照してください 。
ResultType QThreadFunction::takeResult() const
別のスレッドで実行された関数から報告されたResultTypeを取得(取り出す)します。
注: isResultAvailable() を呼び出して結果が準備できていることを確認してください 。そうしないと、結果がまだ報告されていない場合、takeResult() の呼び出しがブロックされる可能性があります。また、関数の実行が終了しても結果が報告されなかった場合には、クラッシュする可能性があります。
QFuture::takeResult()も参照してください 。
QThreadPool *QThreadFunction::threadPool() const
呼び出しの実行時に使用されるスレッドプールを返します。nullptr が返された場合、QThreadPool::globalInstance()が使用されます。
setThreadPool()も参照してください 。
© 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.