Auf dieser Seite

QtTaskTree::QThreadFunction Class

template <typename ResultType> class QtTaskTree::QThreadFunction

Eine Klassenvorlage, die die Ausführung einer Funktion in einem separaten Thread über QtConcurrent::run() steuert. Mehr...

Header: #include <qthreadfunctiontask.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS TaskTree)
target_link_libraries(mytarget PRIVATE Qt6::TaskTree)
qmake: QT += tasktree
Seit: Qt 6.11
Erbt von: QtTaskTree::QThreadFunctionBase
Status: Technologievorschau

Diese Klasse befindet sich in der Technologievorschau und kann sich noch ändern.

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

Ausführliche Beschreibung

Eine `QThreadFunction` ist eine praktische Klassenvorlage, bei der ` ResultType ` den Rückgabetyp der gespeicherten Funktion angibt und die eine gespeicherte Funktion, die später über `QtConcurrent::run()` aufgerufen werden soll, mit einem internen ` QFutureWatcher ` kombiniert, das die Ausführung der Funktion überwacht. Verwenden Sie ` QThreadFunctionTask `, um die `QThreadFunction` im Rahmen des „ QTaskTree “-Rezepts auszuführen.

Legen Sie mithilfe der Methode ` setThreadFunctionData()` eine Funktion mit ihren Argumenten fest, die in einem separaten Thread ausgeführt werden soll.

Um einen Fehler aus einer Funktion zu melden, die in einem separaten Thread läuft, setzen Sie das Argument „ QPromise<ResultType> &promise “ in dieser Funktion als erstes Argument ein und brechen Sie die „Future“ des Promises 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 Thread ` QThreadPool` auszuführen; andernfalls verwendet die Funktion den Standard-Thread ` global thread pool`.

Verwenden Sie ` setAutoDelayedSync()`, um die automatische verzögerte Synchronisation zu aktivieren oder zu deaktivieren.

Um die Funktionsausführung zu steuern, stellen Sie eine Verbindung zu den Signalen des zugehörigen ` futureWatcher()` her. Um die Ausgabedaten zu erfassen, verwenden Sie die Getter-Methoden ` result()`, ` resultAt()` oder ` results()`.

Dokumentation der Member-Funktionen

[implicit] QThreadFunction::QThreadFunction(QObject *parent = nullptr)

Erstellt eine `QThreadFunction` mit einem angegebenen ` parent`.

[override virtual] QThreadFunction::~QThreadFunction()

Löscht die „ QThreadFunction “. Wenn die „ QThreadFunction “ nicht ausgeführt wird, werden keine weiteren Aktionen durchgeführt; andernfalls wird die zugehörige Future abgebrochen, und je nach Einstellung der automatischen verzögerten Synchronisation werden die folgenden Aktionen durchgeführt:

Automatische verzögerte SynchronisationAktion
EinDer zugehörige „ QFuture “ wird in der globalen Registrierung gespeichert. Verwenden Sie „ QThreadFunctionBase::syncAll()“ beim Beenden der Anwendung, um alle zuvor in der globalen Registrierung gespeicherten Futures zu synchronisieren.
AusEin blockierender Aufruf von ` QFuture::waitForFinished()` wird direkt ausgeführt.

Wenn die automatische verzögerte Synchronisation aktiviert ist, kann die Abbruchanforderung des Futures innerhalb der noch laufenden Funktion in einem separaten Thread abgefangen werden, sodass diese so schnell wie möglich beendet wird, ohne ihre Aufgabe vollständig auszuführen.

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 dabei sind, den Abbruchvorgang abzuschließen.

Hinweis: Wenn die automatische verzögerte Synchronisation aktiviert ist, läuft die Funktion noch eine Weile weiter, nachdem der Destruktor von ` QThreadFunction` beendet wurde. Es liegt daher in der Verantwortung des Benutzers, sicherzustellen, dass alle Daten, auf die die Funktion zugreift, weiterhin verfügbar sind. Wenn dies nicht garantiert werden kann, deaktivieren Sie die automatische verzögerte Synchronisation über ` QThreadFunction::setAutoDelayedSync(false)`. In diesem Fall wartet der Destruktor von ` QThreadFunction ` blockierend, bis die Funktion beendet ist, bevor ` QThreadFunction` gelöscht wird. Weitere Informationen zum Template-Parameter ` Deleter ` finden Sie in der Dokumentation unter QCustomTask.

Siehe auch „ setAutoDelayedSync()“ und „ syncAll()“.

QFuture<ResultType> QThreadFunction::future() const

Gibt den „ QFuture “ <ResultType> zurück, der mit der in einem separaten Thread ausgeführten Funktion verknüpft ist.

QFutureWatcher<ResultType> *QThreadFunction::futureWatcher()

Gibt den Zeiger auf den „ QFutureWatcher<ResultType> “ zurück, der mit der in einem separaten Thread ausgeführten Funktion verknüpft ist. Die Lebensdauer des zurückgegebenen Watchers ist an die „ QThreadFunction “-Instanz gebunden.

Verwenden Sie diese Funktion, wenn Sie mehr Kontrolle über die zukünftige Ausführung benötigen, beispielsweise 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 verknüpft ist.

Dies ist eine überladene Funktion.

bool QThreadFunction::isAutoDelayedSync() const

Gibt zurück, ob die automatische verzögerte Synchronisierung aktiviert ist.

Siehe auch syncAll() und setAutoDelayedSync().

bool QThreadFunction::isDone() const

Gibt zurück, ob die Ausführung der Funktion abgeschlossen ist.

bool QThreadFunction::isResultAvailable() const

Gibt zurück, ob das Ergebnis bereitsteht.

Siehe auch ` result()`.

ResultType QThreadFunction::result() const

Gibt den ResultType zurück, der von der in einem separaten Thread ausgeführten Funktion gemeldet wurde.

Hinweis: Stellen Sie sicher, dass das Ergebnis bereitsteht, indem Sie ` isResultAvailable()` aufrufen. Andernfalls kann der Aufruf von `result()` blockieren, falls das Ergebnis noch nicht gemeldet wurde, oder sogar zu einem Absturz führen, falls die Ausführung der Funktion beendet wurde, ohne ein Ergebnis zu melden.

Siehe auch ` QFutureWatcher::result()`.

ResultType QThreadFunction::resultAt(int index) const

Gibt den ResultType zurück, der von der Funktion gemeldet wird, die in einem separaten Thread unter index ausgeführt wurde.

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)

Legt die automatische verzögerte Synchronisation auf „ on “ fest.

Standardmäßig ist die automatische verzögerte Synchronisation aktiviert, was bedeutet, dass die Freigabe des laufenden „ QThreadFunction “-Objekts nicht blockierend wartet, bis die in einem separaten Thread ausgeführte Funktion beendet ist. Stattdessen wird die zugehörige „ QFuture “ abgebrochen, und die Funktion läuft weiter, bis sie beendet ist. Die Abbruchmeldung kann von der in einem separaten Thread ausgeführten Funktion über das Argument „ QPromise “ abgefangen werden, sodass diese vorzeitig beendet werden kann, ohne ihre Aufgabe vollständig ausgeführt zu haben. Falls die automatische verzögerte Synchronisation aktiviert ist, muss beim Beenden der Anwendung „ QThreadFunctionBase::syncAll()“ aufgerufen werden, um alle möglicherweise in separaten Threads laufenden Funktionen zu synchronisieren.

Wenn die automatische verzögerte Synchronisation deaktiviert ist, erfolgt die Synchronisation bei der Zerstörung von ` QThreadFunction`, was den aufrufenden Thread für eine beträchtliche Zeit blockieren kann.

Die automatische Synchronisation wird nur verwendet, wenn ` QThreadFunction ` vom Hauptthread aus ausgeführt wurde.

Siehe auch ` syncAll()` und ` isAutoDelayedSync()`.

template <typename Function, typename... Args> void QThreadFunction::setThreadFunctionData(Function &&function, Args &&... args)

Legt fest, dass die Funktion „ function “ bei Aufruf von „start()“ mit dem übergebenen „ args “ in einem separaten Thread ausgeführt wird.

Siehe auch QtConcurrent::run().

void QThreadFunction::setThreadPool(QThreadPool *pool)

Legt die „ QThreadPool “ pool fest, die bei der Ausführung des Aufrufs verwendet werden soll. Wenn die übergebene „ pool “ den Wert „ nullptr “ hat, wird die „ QThreadPool::globalInstance()“ verwendet.

Siehe auch threadPool().

ResultType QThreadFunction::takeResult() const

Ruft den „ResultType“ ab, der von der in einem separaten Thread ausgeführten Funktion zurückgegeben wurde.

Hinweis: Stellen Sie sicher, dass das Ergebnis bereitsteht, indem Sie ` isResultAvailable()` aufrufen. Andernfalls kann der Aufruf von `takeResult()` blockieren, falls das Ergebnis noch nicht gemeldet wurde, oder sogar zu einem Absturz führen, falls die Ausführung der Funktion ohne Meldung eines Ergebnisses beendet wurde.

Siehe auch ` QFuture::takeResult()`.

QThreadPool *QThreadFunction::threadPool() const

Gibt den Thread-Pool zurück, der bei der Ausführung des Aufrufs verwendet wird. Wird „ nullptr “ zurückgegeben, 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.