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...

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 SynchronisationAktion
AufDer 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.
AusEin 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.