QtTaskTree::QThreadFunction Class
template <typename ResultType> class QtTaskTree::QThreadFunctionEine Klassenvorlage, die die Ausführung einer Funktion in einem separaten Thread über QtConcurrent::run() steuert. Mehr...
| Kopfzeile: | #include <qthreadfunctiontask.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS TaskTree)target_link_libraries(mytarget PRIVATE Qt6::TaskTree) |
| qmake: | QT += tasktree |
| Seit: | Qt 6.11 |
| Vererbt: | QtTaskTree::QThreadFunctionBase |
Hinweis: Alle Funktionen in dieser Klasse sind reentrant.
Öffentliche Funktionen
| 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 |
Detaillierte Beschreibung
Eine QThreadFunction ist eine praktische Klassenvorlage, die eine gespeicherte Funktion, die später über QtConcurrent::run() aufgerufen wird, mit einer internen QFutureWatcher kombiniert, die die Funktionsausführung überwacht. Verwenden Sie QThreadFunctionTask, um die QThreadFunction innerhalb des QTaskTree Rezepts auszuführen.
Setzen Sie eine Funktion mit ihren Argumenten zur Ausführung in einem separaten Thread mit der Methode setThreadFunctionData().
Um einen Fehler innerhalb der Funktion, die in einem separaten Thread ausgeführt wird, zu melden, setzen Sie das QPromise<ResultType> &promise Argument in dieser Funktion als erstes Argument und brechen Sie die Zukunft des Versprechens ab. Beispiel:
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();
Verwenden Sie setThreadPool(), um eine Funktion in einem gewünschten QThreadPool auszuführen, andernfalls wird die Funktion global thread pool verwenden.
Verwenden Sie setAutoDelayedSync(), um die automatische verzögerte Synchronisierung zu aktivieren.
Um die Ausführung der Funktion zu steuern, verbinden Sie sich mit den Signalen der zugehörigen futureWatcher(). Um die Ausgabedaten zu sammeln, verwenden Sie die Getter result(), resultAt() oder results().
Dokumentation der Mitgliedsfunktionen
[default] QThreadFunction::QThreadFunction(QObject *parent = nullptr)
Konstruiert eine QThreadFunction mit einer gegebenen parent.
[override virtual] QThreadFunction::~QThreadFunction()
Zerstört die QThreadFunction. Wenn die QThreadFunction nicht läuft, werden keine weiteren Aktionen durchgeführt, andernfalls wird der zugehörige Future abgebrochen, und je nach automatischer verzögerter Synchronisation werden die folgenden Aktionen durchgeführt:
| Automatische verzögerte Synchronisation | Aktion |
|---|---|
| Auf | Der zugehörige QFuture wird in der globalen Registrierung gespeichert. Verwenden Sie QThreadFunctionBase::syncAll() bei Beendigung der Anwendung, um alle zuvor in der globalen Registrierung gespeicherten Futures zu synchronisieren. |
| Aus | Ein blockierender Aufruf von QFuture::waitForFinished() wird direkt ausgeführt. |
Wenn die automatische verzögerte Synchronisierung eingeschaltet ist, kann die Stornierung des Futures innerhalb der noch laufenden Funktion in einem separaten Thread abgefangen werden, so dass sie so schnell wie möglich beendet werden kann, ohne ihre Aufgabe zu beenden.
Schließlich sollte beim Beenden der Anwendung QThreadFunctionBase::syncAll() aufgerufen werden, um alle Funktionen zu synchronisieren, die möglicherweise noch in separaten Threads laufen. Der Aufruf von QThreadFunctionBase::syncAll() ist blockierend, falls einige Funktionen noch in der Endphase sind.
Hinweis: Wenn die automatische verzögerte Synchronisierung eingeschaltet ist, läuft die Funktion noch eine Weile weiter, nachdem der Destruktor von QThreadFunction beendet ist, so dass es in der Verantwortung des Benutzers liegt, sicherzustellen, dass alle Daten, mit denen die Funktion arbeiten kann, noch verfügbar sind. Wenn das nicht garantiert werden kann, schalten Sie die automatische verzögerte Synchronisation über QThreadFunction::setAutoDelayedSync aus (false). In diesem Fall wartet der QThreadFunction Destruktor blockierend, bis die Funktion beendet ist, bevor er die QThreadFunction löscht. Weitere Informationen zum Deleter Template-Parameter finden Sie in der QCustomTask Dokumentation.
Siehe auch setAutoDelayedSync() und syncAll().
QFuture<ResultType> QThreadFunction::future() const
Gibt die QFuture<ResultType> zurück, die mit der in einem separaten Thread ausgeführten Funktion verbunden ist.
QFutureWatcher<ResultType> *QThreadFunction::futureWatcher()
Gibt den Zeiger auf den QFutureWatcher<ResultType> zurück, der mit der in einem separaten Thread ausgeführten Funktion verbunden ist. Die Lebensdauer des zurückgegebenen Watchers ist an die Instanz QThreadFunction gebunden.
Verwenden Sie diese Funktion, wenn Sie mehr Kontrolle über die zukünftige Ausführung benötigen, z. B. um eine Verbindung zu den Fortschrittssignalen des zurückgegebenen Watchers herzustellen.
const QFutureWatcher<ResultType> *QThreadFunction::futureWatcher() const
Gibt den Zeiger const auf die QFutureWatcher<ResultType> zurück, die mit der in einem separaten Thread ausgeführten Funktion verbunden ist.
Dies ist eine überladene Funktion.
bool QThreadFunction::isAutoDelayedSync() const
Gibt zurück, ob die automatische verzögerte Synchronisierung eingeschaltet ist.
Siehe auch syncAll() und setAutoDelayedSync().
bool QThreadFunction::isDone() const
Gibt zurück, ob die Ausführung der Funktion beendet ist.
bool QThreadFunction::isResultAvailable() const
Gibt zurück, ob das Ergebnis fertig ist.
Siehe auch result().
ResultType QThreadFunction::result() const
Gibt den Ergebnistyp zurück, der von der in einem separaten Thread ausgeführten Funktion gemeldet wurde.
Hinweis: Stellen Sie sicher, dass das Ergebnis bereit ist, indem Sie isResultAvailable() aufrufen. Andernfalls kann der Aufruf von result() blockieren, falls das Ergebnis noch nicht gemeldet wurde, oder sogar abstürzen, falls die Funktionsausführung beendet wurde, ohne ein Ergebnis zu melden.
Siehe auch QFutureWatcher::result().
ResultType QThreadFunction::resultAt(int index) const
Gibt den Ergebnistyp zurück, der von der Funktion gemeldet wurde, die in einem separaten Thread unter index ausgeführt wird.
Siehe auch result() und QFutureWatcher::resultAt().
QList<ResultType> QThreadFunction::results() const
Gibt die Liste der ResultType zurück, die von der in einem separaten Thread ausgeführten Funktion gemeldet wurden.
Siehe auch result(), resultAt(), und QFuture::results().
void QThreadFunction::setAutoDelayedSync(bool on)
Setzt die automatische verzögerte Synchronisierung auf on.
Standardmäßig ist die automatische verzögerte Synchronisierung eingeschaltet, was bedeutet, dass die Zerstörung des laufenden QThreadFunction Objekts nicht blockiert wird, bis die in einem separaten Thread laufende Funktion beendet ist. Stattdessen wird die zugehörige QFuture abgebrochen, und die Funktion wird weiter ausgeführt, bis sie beendet ist. Der Abbruch kann von der Funktion, die in einem separaten Thread läuft, über das Argument QPromise abgefangen werden, so dass sie vorzeitig beendet werden kann, ohne ihre Aufgabe zu erfüllen. Wenn die automatische verzögerte Synchronisierung eingeschaltet ist, muss beim Beenden der Anwendung QThreadFunctionBase::syncAll() aufgerufen werden, um alle möglicherweise laufenden Funktionen in separaten Threads zu synchronisieren.
Wenn die automatische verzögerte Synchronisierung ausgeschaltet ist, erfolgt die Synchronisierung bei der Zerstörung von QThreadFunction, was den aufrufenden Thread für eine beträchtliche Zeitspanne blockieren kann.
Die automatische Synchronisation wird nur verwendet, wenn QThreadFunction vom Haupt-Thread aus ausgeführt wurde.
Siehe auch syncAll() und isAutoDelayedSync().
template <typename Function, typename... Args> void QThreadFunction::setThreadFunctionData(Function &&function, Args &&... args)
Legt die function fest, die mit der übergebenen args in einem separaten Thread ausgeführt werden soll, wenn start() aufgerufen wird.
Siehe auch QtConcurrent::run().
void QThreadFunction::setThreadPool(QThreadPool *pool)
Legt den QThreadPool pool fest, der bei der Ausführung des Aufrufs verwendet werden soll. Wenn die übergebene pool nullptr ist, wird QThreadPool::globalInstance() verwendet.
Siehe auch threadPool().
ResultType QThreadFunction::takeResult() const
Nimmt (verschiebt) den Ergebnistyp, der von der in einem separaten Thread ausgeführten Funktion gemeldet wurde.
Hinweis: Stellen Sie sicher, dass das Ergebnis bereit ist, indem Sie isResultAvailable() aufrufen. Andernfalls kann der Aufruf von takeResult() blockieren, falls das Ergebnis noch nicht gemeldet wurde, oder sogar abstürzen, falls die Funktionsausführung beendet wurde, ohne ein Ergebnis zu melden.
Siehe auch QFuture::takeResult().
QThreadPool *QThreadFunction::threadPool() const
Gibt den Thread-Pool zurück, der bei der Ausführung des Aufrufs verwendet wird. Wenn nullptr zurückgegeben wird, wird QThreadPool::globalInstance() verwendet.
Siehe auch 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.