QFutureWatcher Class

template <typename T> class QFutureWatcher

QFutureWatcherクラスは、シグナルとスロットを使ってQFutureさらに...

Header: #include <QFutureWatcher>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Inherits: QObject

注意:このクラスの関数はすべてリエントラントです。

パブリック関数

QFutureWatcher(QObject *parent = nullptr)
virtual ~QFutureWatcher()
QFuture<T> future() const
bool isCanceled() const
bool isFinished() const
bool isRunning() const
bool isStarted() const
(since 6.0) bool isSuspended() const
(since 6.0) bool isSuspending() const
int progressMaximum() const
int progressMinimum() const
QString progressText() const
int progressValue() const
T result() const
T resultAt(int index) const
void setFuture(const QFuture<T> &future)
void setPendingResultsLimit(int limit)
void waitForFinished()

パブリック・スロット

void cancel()
void resume()
(since 6.0) void setSuspended(bool suspend)
(since 6.0) void suspend()
(since 6.0) void toggleSuspended()

シグナル

void canceled()
void finished()
void progressRangeChanged(int minimum, int maximum)
void progressTextChanged(const QString &progressText)
void progressValueChanged(int progressValue)
void resultReadyAt(int index)
void resultsReadyAt(int beginIndex, int endIndex)
void resumed()
void started()
(since 6.0) void suspended()
(since 6.0) void suspending()

詳細説明

QFutureWatcher は、QFuture に関する情報と通知を提供します。setFuture() 関数を使用して、特定のQFuture の監視を開始します。future() 関数は、setFuture() で設定された未来を返します。

QFuture progressValue()、 ()、 ()、 ()、 ()、 ()、 ()、 ()、 ()、 ()、 ()、 ()、 (). (), (), (), (), () 関数はQFutureWatcherのスロットです。progressMinimum progressMaximum progressText isStarted isFinished isRunning isCanceled isSuspending isSuspended waitForFinished result resultAt cancel setSuspended suspend resume toggleSuspended

ステータスの変更は、started()、finished()、canceled()、suspending()、suspended()、resumed()、resultReadyAt()、resultsReadyAt() シグナルによって報告される。進捗情報は、progressRangeChanged ()、voidprogressValueChanged ()、progressTextChanged ()シグナルから提供される。

スロットル制御は、setPendingResultsLimit ()関数によって提供される。保留中のresultReadyAt() またはresultsReadyAt() シグナルの数が制限を超えると、未来で表される計算が自動的にスロットルされる。保留中のシグナルの数が制限値を下回ると、計算が再開されます。

例例:計算を開始し、終了時にスロットのコールバックを取得する:

// Instantiate the objects and connect to the finished signal.
MyClass myObject;
QFutureWatcher<int> watcher;
connect(&watcher, &QFutureWatcher<int>::finished, &myObject, &MyClass::handleFinished);

// Start the computation.
QFuture<int> future = QtConcurrent::run(...);
watcher.setFuture(future);

実行中のすべての非同期計算をキャンセルまたは中断できるわけではないことに注意してください。例えば、QtConcurrent::run() が返す未来はキャンセルできませんが、QtConcurrent::mappedReduced() が返す未来はキャンセルできます。

QFutureWatcher<void> は、結果フェッチ関数を含まないように特化されています。QFutureWatcher<void> は、どのようなQFuture<T> でもウォッチすることができます。これは、実際の結果データではなく、ステータスや進捗情報のみが必要な場合に便利です。

QFuture およびQt Concurrentも参照してください

メンバ関数のドキュメント

[explicit] QFutureWatcher::QFutureWatcher(QObject *parent = nullptr)

与えられたparent で新しい QFutureWatcher を構築します。setFuture() で未来が設定されるまでは、関数isStarted(),isCanceled(),isFinished() はtrue を返します。

[virtual] QFutureWatcher::~QFutureWatcher()

QFutureWatcher を破棄します。

[slot] void QFutureWatcher::cancel()

future()で表される非同期計算をキャンセルする。キャンセルは非同期であることに注意してください。同期キャンセルが必要な場合は、cancel() を呼び出した後にwaitForFinished() を使用します。

現在利用可能な結果は、キャンセルされたQFuture でもアクセス可能であるが、この関数を呼 んだ後は、新しい結果は利用できなくなる。また、このQFutureWatcher は、一度キャンセルされると、進行状況シグナルと結果準備完了シグナルを送 信しません。これには、progressValueChanged ()、progressRangeChanged ()、progressTextChanged ()、resultReadyAt ()、resultsReadyAt ()の各シグナルが含まれる。

実行中のすべての非同期計算をキャンセルできるわけではないことに注意。例えば、QtConcurrent::run() が返すQFuture はキャンセルできませんが、QtConcurrent::mappedReduced() が返すQFuture はキャンセルできます。

[signal] void QFutureWatcher::canceled()

このシグナルは、監視されている未来がキャンセルされた場合に発行されます。

[signal] void QFutureWatcher::finished()

このシグナルは、監視されている未来が終了したときに発行されます。

QFuture<T> QFutureWatcher::future() const

ウォッチされている未来を返します。

setFuture()も参照してください

bool QFutureWatcher::isCanceled() const

非同期計算がcancel() 関数でキャンセルされた場合、または未来が設定されていない場合はtrue を返し、そうでない場合はfalse を返す。

そうでない場合は、true を返します。この関数が を返しても、まだ計算が実行されている可能性があることに注意してください。詳細はcancel() を参照。

bool QFutureWatcher::isFinished() const

future() で表される非同期計算が終了した場合、または future が設定されていない場合はtrue を返し、そうでない場合はfalse を返します。

bool QFutureWatcher::isRunning() const

future() で表される非同期計算が現在実行中の場合はtrue を返し、そうでない場合はfalse を返す。

bool QFutureWatcher::isStarted() const

future()で表される非同期計算が開始された場合、またはfutureが設定されていない場合はtrue を返し、そうでない場合はfalse を返す。

[since 6.0] bool QFutureWatcher::isSuspended() const

非同期計算の一時停止が要求され、それが有効である場合、つまり、これ以上の結果や進捗の変更が期待されない場合は、true を返す。

この関数はQt 6.0で導入されました。

suspended(),setSuspended(),isSuspending()も参照してください

[since 6.0] bool QFutureWatcher::isSuspending() const

非同期計算がsuspend() 関数で中断されたが、作業がまだ中断されておらず、計算がまだ実行されている場合、true を返します。それ以外の場合はfalse を返す。

一時停止が実際に有効かどうかを確認するには、代わりにisSuspended() を使用します。

この関数は Qt 6.0 で導入されました。

setSuspended(),toggleSuspended(),isSuspended()も参照してください

int QFutureWatcher::progressMaximum() const

progressValue() の最大値を返します。

progressValue() およびprogressMinimum() も参照

int QFutureWatcher::progressMinimum() const

progressValue() の最小値を返します。

progressValue() およびprogressMaximum()も参照

[signal] void QFutureWatcher::progressRangeChanged(int minimum, int maximum)

ウォッチされている未来の進行範囲が、minimum およびmaximum

QString QFutureWatcher::progressText() const

非同期計算によって報告された進捗のテキスト表現(オプション)を返します。

すべての計算が進行状況のテキスト表現を提供するわけではないことに注意してください。

[signal] void QFutureWatcher::progressTextChanged(const QString &progressText)

このシグナルは、ウォッチされた未来がテキストによる進捗情報を報告したときに発行されます。progressText

int QFutureWatcher::progressValue() const

progressMinimum() とprogressMaximum() の間にある現在の進捗値を返す。

progressMinimum() およびprogressMaximum()も参照して ください。

[signal] void QFutureWatcher::progressValueChanged(int progressValue)

このシグナルは、ウォッチされているフューチャーが進捗を報告するときに発せられる。progressValue は現在の進捗を与える。GUIイベントループの過負荷を避けるために、QFutureWatcher 、進捗シグナルの発信率を制限しています。つまり、このスロットに接続されたリスナーは、futureが行うすべての進捗報告を受け取れない可能性があります。最後の進捗更新(progressValue が最大値に等しい)が常に配信されます。

template <typename U = T, typename = QtPrivate::EnableForNonVoid<U>> T QFutureWatcher::result() const

future() の最初の結果を返します。結果がすぐに利用できない場合、この関数はブロックし、結果が利用可能になるのを待ちます。これは、resultAt(0)を呼び出すための便利なメソッドである。

resultAt()も参照

template <typename U = T, typename = QtPrivate::EnableForNonVoid<U>> T QFutureWatcher::resultAt(int index) const

future() のindex での結果を返す。結果がすぐに利用できない場合、この関数はブロックして結果が利用できるようになるまで待ちます。

result()も参照のこと

[signal] void QFutureWatcher::resultReadyAt(int index)

このシグナルは、ウォッチされた未来がindex で準備完了の結果を報告したときに発せられます。未来が複数の結果を報告した場合、インデックスがどの結果かを示します。結果は順番に報告されません。結果を得るには、resultAt(index) を呼び出します;

[signal] void QFutureWatcher::resultsReadyAt(int beginIndex, int endIndex)

このシグナルは、ウォッチされた未来が準備完了の結果を報告するときに発せられます。結果はbeginIndex からendIndex までのインデックスが付けられます。

[slot] void QFutureWatcher::resume()

future() で表される非同期計算を再開する。これはsetSuspended(false) を呼び出すだけの便利なメソッドです。

suspend()も参照

[signal] void QFutureWatcher::resumed()

このシグナルは、監視されている未来が再開されたときに発せられます。

void QFutureWatcher::setFuture(const QFuture<T> &future)

与えられたfuture のウォッチングを開始する。

future がすでに開始されている場合、ウォッチャーは最初にシグナルを発し、リスナーに未来の状態を知らせる。started()、progressRangeChanged()、progressValueChanged()、progressTextChanged()、resultsReadyAt()、resultReadyAt()、suspending()、suspended()、canceled()、finished()。このうち、resultsReadyAt () とresultReadyAt ()は、利用可能な結果をすべて網羅するために、数回発 行されることがある。progressValueChanged() とprogressTextChanged() は、利用可能な最新の進捗値とテキストに対して1回だけ発行される。

競合状態を回避するには、接続を行った後でこの関数を呼び出すことが重要である。

future()も参照

void QFutureWatcher::setPendingResultsLimit(int limit)

setPendingResultsLimit() は、絞り込み制御を行います。保留中のresultReadyAt() またはresultsReadyAt() シグナルの数がlimit を超えると、future で表される計算が自動的にスロットルされる。保留中のシグナルの数がlimit を下回ると、計算が再開されます。

[slot, since 6.0] void QFutureWatcher::setSuspended(bool suspend)

suspend がtrueの場合、この関数はfuture()で表される非同期計算を一時停止する。すでに計算が中断されている場合、この関数は何もしない。QFutureWatcher 、未来が中断されても、進行状況シグナルと結果準備完了シグナルの配信が直ちに停止されるわけではない。中断された時点では、まだ進行中の計算があり、それを停止することはできません。そのような計算のシグナルはまだ配信されます。

suspend が false の場合、この関数は非同期計算を再開する。計算が中断されていない場合、この関数は何もしない。

すべての計算を中断できるわけではないことに注意してください。例えば、QtConcurrent::run() が返すQFuture は中断できませんが、QtConcurrent::mappedReduced() が返すQFuture は中断できます。

この関数は Qt 6.0 で導入されました。

suspended(),suspend(),resume(),toggleSuspended()も参照してください

[signal] void QFutureWatcher::started()

このシグナルは、このQFutureWatchersetFuture() で設定された未来の監視を開始したときに発せられます。

[slot, since 6.0] void QFutureWatcher::suspend()

この future で表される非同期計算を一時停止します。これは、setSuspended(true)を呼び出すだけの便利なメソッドです。

この関数は Qt 6.0 で導入されました。

resume()も参照してください

[signal, since 6.0] void QFutureWatcher::suspended()

このシグナルは、suspend() が有効になった時、つまり実行中の計算がなくなった時に発せられます。このシグナルを受け取った後は、結果の準備完了や進捗報告のシグナルは期待されません。

この関数は Qt 6.0 で導入されました。

setSuspended(),suspend(), suspended()も参照してください

[signal, since 6.0] void QFutureWatcher::suspending()

このシグナルは、ウォッチされている未来の状態が suspended に設定されたときに発行されます。

注意: このシグナルは、サスペンドが要求されたことを通知するだけです。すべてのバックグラウンド処理が停止したことを示すものではありません。サスペンドされた時点で進行中だった計算のシグナルはまだ送られます。サスペンドが実際に有効になったことを通知するには、suspended() シグナルを使用してください。

この関数はQt 6.0で導入されました。

setSuspended(),suspend(),suspended()も参照してください

[slot, since 6.0] void QFutureWatcher::toggleSuspended()

非同期計算のサスペンド状態を切り替えます。言い換えると、計算が現在サスペンドまたは中断されている場合、この関数を呼び出すと再開されます。これはsetSuspended(!(isSuspending() ||isSuspended())) を呼び出すための便利なメソッドです。

この関数は Qt 6.0 で導入されました。

setSuspended(),suspend(),resume()も参照してください

void QFutureWatcher::waitForFinished()

非同期計算(cancel()された計算を含む)が終了するまで、つまりisFinished() がtrue を返すまで待ちます。

本書に含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。