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 は、QtConcurrent::run() によって後で呼び出される保存された関数と、関数の実行を監視する内部QFutureWatcher を組み合わせた便利なクラステンプレートです。QTaskTree レシピ内で QThreadFunction を実行するにはQThreadFunctionTask を使用してください。
setThreadFunctionData() メソッドを使用して、別スレッドで実行される引数を持つ関数を設定します。
別スレッドで実行されている関数の内部からエラーを報告するには、その関数のQPromise<ResultType> &promise 引数を最初の引数として置き、promise の future をキャンセルします。例
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();
QThreadPool で関数を実行するにはsetThreadPool() を使用します。そうしないと、関数はglobal thread pool を使用します。
自動遅延同期を切り替えるには、setAutoDelayedSync ()を使用する。
関数の実行を制御するには、関連するfutureWatcher() の信号に接続する。出力データを収集するには、result()、resultAt()、またはresults() ゲッターを使用します。
メンバ関数ドキュメント
[default] 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.