QFutureWatcher Class
template <typename T> class QFutureWatcherDie Klasse QFutureWatcher ermöglicht die Überwachung einer QFuture mit Signalen und Slots. Mehr...
Kopfzeile: | #include <QFutureWatcher> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Vererbungen: | QObject |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- Veraltete Mitglieder
- QFutureWatcher ist Teil der Threading-Klassen.
Hinweis: Alle Funktionen in dieser Klasse sind reentrant.
Öffentliche Funktionen
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() |
Öffentliche Slots
void | cancel() |
void | resume() |
(since 6.0) void | setSuspended(bool suspend) |
(since 6.0) void | suspend() |
(since 6.0) void | toggleSuspended() |
Signale
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() |
Detaillierte Beschreibung
QFutureWatcher liefert Informationen und Benachrichtigungen über einen QFuture. Verwenden Sie die Funktion setFuture(), um die Beobachtung eines bestimmten QFuture zu starten. Die Funktion future() gibt den mit setFuture() eingestellten Future zurück.
Der Einfachheit halber sind einige der Funktionen von QFuture auch in QFutureWatcher verfügbar: progressValue(), progressMinimum(), progressMaximum(), progressText(), isStarted(), isFinished(), isRunning(), isCanceled(), isSuspending(), isSuspended(), waitForFinished(), result() und resultAt(). Die Funktionen cancel(), setSuspended(), suspend(), resume(), und toggleSuspended() sind Slots in QFutureWatcher.
Statusänderungen werden über die Signale started(), finished(), canceled(), suspending(), suspended(), resumed(), resultReadyAt(), und resultsReadyAt() gemeldet. Fortschrittsinformationen werden über die Signale progressRangeChanged(), void progressValueChanged() und progressTextChanged() bereitgestellt.
Die Drosselungssteuerung wird von der Funktion setPendingResultsLimit() bereitgestellt. Wenn die Anzahl der anstehenden resultReadyAt() oder resultsReadyAt() Signale den Grenzwert überschreitet, wird die durch den Future repräsentierte Berechnung automatisch gedrosselt. Die Berechnung wird wieder aufgenommen, sobald die Anzahl der anstehenden Signale unter den Grenzwert fällt.
Beispiel: Starten einer Berechnung und Abrufen eines Slot-Callbacks, wenn diese beendet ist:
// 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);
Beachten Sie, dass nicht alle laufenden asynchronen Berechnungen abgebrochen oder unterbrochen werden können. Zum Beispiel kann der von QtConcurrent::run() zurückgegebene Future nicht abgebrochen werden, aber der von QtConcurrent::mappedReduced() zurückgegebene Future schon.
QFutureWatcher<void> ist so spezialisiert, dass es keine der Funktionen zum Abrufen von Ergebnissen enthält. Jedes QFuture<T> kann auch von einem QFutureWatcher<void> überwacht werden. Dies ist nützlich, wenn nur Status- oder Fortschrittsinformationen benötigt werden, nicht aber die eigentlichen Ergebnisdaten.
Siehe auch QFuture und Qt Concurrent.
Dokumentation der Mitgliedsfunktionen
[explicit]
QFutureWatcher::QFutureWatcher(QObject *parent = nullptr)
Konstruiert einen neuen QFutureWatcher mit dem angegebenen parent. Solange kein Future mit setFuture() gesetzt wird, geben die Funktionen isStarted(), isCanceled() und isFinished() true
zurück.
[virtual]
QFutureWatcher::~QFutureWatcher()
Zerstört die QFutureWatcher.
[slot]
void QFutureWatcher::cancel()
Bricht die asynchrone Berechnung ab, die durch future() dargestellt wird. Beachten Sie, dass der Abbruch asynchron erfolgt. Verwenden Sie waitForFinished() nach dem Aufruf von cancel(), wenn Sie einen synchronen Abbruch benötigen.
Auf aktuell verfügbare Ergebnisse kann bei einem abgebrochenen QFuture noch zugegriffen werden, aber neue Ergebnisse werden nach dem Aufruf dieser Funktion nicht mehr verfügbar. Außerdem liefert die Funktion QFutureWatcher nach dem Abbruch keine Fortschritts- und Ergebnisbereitschaftssignale. Dies gilt auch für die Signale progressValueChanged(), progressRangeChanged(), progressTextChanged(), resultReadyAt() und resultsReadyAt().
Beachten Sie, dass nicht alle laufenden asynchronen Berechnungen abgebrochen werden können. Zum Beispiel kann das von QtConcurrent::run() zurückgegebene QFuture nicht abgebrochen werden; das von QtConcurrent::mappedReduced() zurückgegebene QFuture hingegen schon.
[signal]
void QFutureWatcher::canceled()
Dieses Signal wird ausgesendet, wenn der beobachtete Future abgebrochen wird.
[signal]
void QFutureWatcher::finished()
Dieses Signal wird ausgegeben, wenn der beobachtete Future beendet ist.
QFuture<T> QFutureWatcher::future() const
Gibt den beobachteten Future zurück.
Siehe auch setFuture().
bool QFutureWatcher::isCanceled() const
Gibt true
zurück, wenn die asynchrone Berechnung mit der Funktion cancel() abgebrochen wurde, oder wenn kein Future gesetzt wurde; andernfalls wird false
zurückgegeben.
Beachten Sie, dass die Berechnung noch laufen kann, obwohl diese Funktion true
zurückgibt. Siehe cancel() für weitere Einzelheiten.
bool QFutureWatcher::isFinished() const
Gibt true
zurück, wenn die asynchrone Berechnung, die durch future() dargestellt wird, beendet ist oder wenn kein Future gesetzt wurde; andernfalls wird false
zurückgegeben.
bool QFutureWatcher::isRunning() const
Gibt true
zurück, wenn die asynchrone Berechnung, die durch future() dargestellt wird, gerade läuft; andernfalls wird false
zurückgegeben.
bool QFutureWatcher::isStarted() const
Gibt true
zurück, wenn die asynchrone Berechnung, die durch future() repräsentiert wird, gestartet wurde, oder wenn kein Future gesetzt wurde; andernfalls wird false
zurückgegeben.
[since 6.0]
bool QFutureWatcher::isSuspended() const
Gibt true
zurück, wenn eine Unterbrechung der asynchronen Berechnung angefordert wurde und diese in Kraft ist, was bedeutet, dass keine weiteren Ergebnisse oder Fortschrittsänderungen erwartet werden.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch suspended(), setSuspended(), und isSuspending().
[since 6.0]
bool QFutureWatcher::isSuspending() const
Gibt true
zurück, wenn die asynchrone Berechnung mit der Funktion suspend() unterbrochen wurde, die Arbeit aber noch nicht unterbrochen ist und die Berechnung noch läuft. Andernfalls wird false
zurückgegeben.
Um zu prüfen, ob die Unterbrechung tatsächlich in Kraft ist, verwenden Sie stattdessen isSuspended().
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch setSuspended(), toggleSuspended(), und isSuspended().
int QFutureWatcher::progressMaximum() const
Gibt das Maximum zurück progressValue().
Siehe auch progressValue() und progressMinimum().
int QFutureWatcher::progressMinimum() const
Gibt das Minimum progressValue() zurück.
Siehe auch progressValue() und progressMaximum().
[signal]
void QFutureWatcher::progressRangeChanged(int minimum, int maximum)
Der Fortschrittsbereich für die beobachtete Zukunft hat sich auf minimum und maximum
QString QFutureWatcher::progressText() const
Gibt die (optionale) textuelle Darstellung des Fortschritts zurück, wie er von der asynchronen Berechnung gemeldet wird.
Beachten Sie, dass nicht alle Berechnungen eine textuelle Darstellung des Fortschritts liefern, so dass diese Funktion eine leere Zeichenkette zurückgeben kann.
[signal]
void QFutureWatcher::progressTextChanged(const QString &progressText)
Dieses Signal wird ausgegeben, wenn der überwachte Future textuelle Fortschrittsinformationen meldet, progressText.
int QFutureWatcher::progressValue() const
Gibt den aktuellen Fortschrittswert zurück, der zwischen den Werten progressMinimum() und progressMaximum() liegt.
Siehe auch progressMinimum() und progressMaximum().
[signal]
void QFutureWatcher::progressValueChanged(int progressValue)
Dieses Signal wird ausgesendet, wenn der überwachte Future einen Fortschritt meldet, progressValue gibt den aktuellen Fortschritt an. Um eine Überlastung der GUI-Ereignisschleife zu vermeiden, begrenzt QFutureWatcher die Emissionsrate des Fortschrittssignals. Das bedeutet, dass Zuhörer, die mit diesem Slot verbunden sind, möglicherweise nicht alle Fortschrittsmeldungen des Futures erhalten. Die letzte Fortschrittsmeldung (bei der progressValue gleich dem Maximalwert ist) wird immer übermittelt.
template <typename U = T, typename = QtPrivate::EnableForNonVoid<U>> T QFutureWatcher::result() const
Gibt das erste Ergebnis in future() zurück. Wenn das Ergebnis nicht sofort verfügbar ist, blockiert diese Funktion und wartet, bis das Ergebnis verfügbar wird. Dies ist eine praktische Methode für den Aufruf von resultAt(0).
Siehe auch resultAt().
template <typename U = T, typename = QtPrivate::EnableForNonVoid<U>> T QFutureWatcher::resultAt(int index) const
Gibt das Ergebnis unter index in der future() zurück. Wenn das Ergebnis nicht sofort verfügbar ist, blockiert diese Funktion und wartet, bis das Ergebnis verfügbar wird.
Siehe auch result().
[signal]
void QFutureWatcher::resultReadyAt(int index)
Dieses Signal wird ausgegeben, wenn der überwachte Future unter index ein fertiges Ergebnis meldet. Wenn der Future mehrere Ergebnisse meldet, gibt der Index an, um welches es sich handelt. Ergebnisse können in ungeordneter Reihenfolge gemeldet werden. Um das Ergebnis zu erhalten, rufen Sie resultAt(index) auf;
[signal]
void QFutureWatcher::resultsReadyAt(int beginIndex, int endIndex)
Dieses Signal wird ausgegeben, wenn der überwachte Future fertige Ergebnisse meldet. Die Ergebnisse werden von beginIndex bis endIndex indiziert.
[slot]
void QFutureWatcher::resume()
Setzt die asynchrone Berechnung fort, die durch future() dargestellt wird. Dies ist eine einfache Methode, die einfach setSuspended(false) aufruft.
Siehe auch suspend().
[signal]
void QFutureWatcher::resumed()
Dieses Signal wird ausgesendet, wenn der beobachtete Future wieder aufgenommen wird.
void QFutureWatcher::setFuture(const QFuture<T> &future)
Startet die Beobachtung des angegebenen future.
Wenn future bereits gestartet wurde, sendet der Beobachter zunächst Signale, die seine Zuhörer über den Zustand des Futures informieren. Die folgenden Signale werden, falls zutreffend, in der angegebenen Reihenfolge ausgegeben: started(), progressRangeChanged(), progressValueChanged(), progressTextChanged(), resultsReadyAt(), resultReadyAt(), suspending(), suspended(), canceled() und finished(). Von diesen können resultsReadyAt() und resultReadyAt() mehrmals gesendet werden, um alle verfügbaren Ergebnisse abzudecken. progressValueChanged() und progressTextChanged() werden nur einmal für den letzten verfügbaren Fortschrittswert und Text ausgegeben.
Um eine Race Condition zu vermeiden, ist es wichtig, diese Funktion aufzurufen , nachdem die Verbindungen hergestellt wurden.
Siehe auch future().
void QFutureWatcher::setPendingResultsLimit(int limit)
Die Funktion setPendingResultsLimit() ermöglicht die Drosselung. Wenn die Anzahl der anstehenden resultReadyAt() oder resultsReadyAt() Signale den Wert limit übersteigt, wird die Berechnung, die durch den future dargestellt wird, automatisch gedrosselt. Die Berechnung wird wieder aufgenommen, sobald die Anzahl der anstehenden Signale unter den Wert limit fällt.
[slot, since 6.0]
void QFutureWatcher::setSuspended(bool suspend)
Wenn suspend wahr ist, unterbricht diese Funktion die asynchrone Berechnung, die durch future() dargestellt wird. Wenn die Berechnung bereits unterbrochen ist, tut diese Funktion nichts. QFutureWatcher wird nicht sofort aufhören, Fortschritts- und Ergebnisbereitschaftssignale zu liefern, wenn der Future unterbrochen wird. Zum Zeitpunkt der Unterbrechung können noch Berechnungen im Gange sein, die nicht gestoppt werden können. Die Signale für solche Berechnungen werden weiterhin ausgegeben.
Wenn suspend falsch ist, setzt diese Funktion die asynchrone Berechnung fort. Wurde die Berechnung nicht zuvor unterbrochen, bewirkt diese Funktion nichts.
Beachten Sie, dass nicht alle Berechnungen unterbrochen werden können. Zum Beispiel kann die QFuture, die von QtConcurrent::run() zurückgegeben wird, nicht unterbrochen werden, aber die QFuture, die von QtConcurrent::mappedReduced() zurückgegeben wird, kann dies.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch suspended(), suspend(), resume(), und toggleSuspended().
[signal]
void QFutureWatcher::started()
Dieses Signal wird ausgegeben, wenn diese QFutureWatcher beginnt, den mit setFuture() eingestellten Future zu beobachten.
[slot, since 6.0]
void QFutureWatcher::suspend()
Unterbricht die asynchrone Berechnung, die durch diesen Future dargestellt wird. Dies ist eine Komfortmethode, die einfach setSuspended(true) aufruft.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch resume().
[signal, since 6.0]
void QFutureWatcher::suspended()
Dieses Signal wird ausgegeben, wenn suspend() wirksam wurde, was bedeutet, dass keine weiteren Berechnungen mehr laufen. Nach dem Empfang dieses Signals werden keine Ergebnisbereitschafts- oder Fortschrittsmeldungssignale mehr erwartet.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch setSuspended(), suspend(), und suspended().
[signal, since 6.0]
void QFutureWatcher::suspending()
Dieses Signal wird ausgesendet, wenn der Zustand des überwachten Futures auf "suspendiert" gesetzt wird.
Hinweis: Dieses Signal informiert nur darüber, dass die Aussetzung angefordert wurde. Es bedeutet nicht, dass alle Hintergrundoperationen gestoppt sind. Signale für Berechnungen, die zum Zeitpunkt des Aussetzens im Gange waren, werden weiterhin ausgegeben. Um informiert zu werden, wann die Unterbrechung tatsächlich wirksam wurde, verwenden Sie das Signal suspended().
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch setSuspended(), suspend(), und suspended().
[slot, since 6.0]
void QFutureWatcher::toggleSuspended()
Schaltet den angehaltenen Zustand der asynchronen Berechnung um. Mit anderen Worten: Wenn die Berechnung gerade unterbrochen oder ausgesetzt ist, wird sie durch den Aufruf dieser Funktion wieder aufgenommen; wenn die Berechnung läuft, wird sie ausgesetzt. Dies ist eine praktische Methode für den Aufruf von setSuspended(!(isSuspending() || isSuspended())).
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch setSuspended(), suspend(), und resume().
void QFutureWatcher::waitForFinished()
Wartet, bis die asynchrone Berechnung beendet ist (einschließlich der Berechnungen von cancel()ed), d. h. bis isFinished() true
zurückgibt.
© 2025 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.