En esta página

QtTaskTree::QThreadFunction Class

template <typename ResultType> class QtTaskTree::QThreadFunction

Una plantilla de clase que controla la ejecución de una función en un hilo separado a través de QtConcurrent::run(). Más...

Cabecera: #include <qthreadfunctiontask.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS TaskTree)
target_link_libraries(mytarget PRIVATE Qt6::TaskTree)
qmake: QT += tasktree
Desde: Qt 6.11
Hereda: QtTaskTree::QThreadFunctionBase

Nota: Todas las funciones de esta clase son reentrantes.

Funciones Públicas

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

Descripción Detallada

Una QThreadFunction es una práctica plantilla de clase que combina una función almacenada para ser llamada posteriormente mediante QtConcurrent::run() con un QFutureWatcher interno que monitoriza la ejecución de la función. Utilice QThreadFunctionTask para ejecutar la QThreadFunction dentro de la receta QTaskTree.

Establecer una función con sus argumentos para ser ejecutada en un hilo separado usando el método setThreadFunctionData().

Para informar de un error desde dentro de la función que se ejecuta en un hilo separado, coloque el argumento QPromise<ResultType> &promise en esa función como primer argumento, y cancele el futuro de la promesa. Ejemplo:

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();

Utilice setThreadPool() para ejecutar una función en un QThreadPool deseado, de lo contrario la función utilizará el global thread pool.

Utilice setAutoDelayedSync() para activar la sincronización automática retardada.

Para controlar la ejecución de la función, conéctese a las señales del futureWatcher() asociado. Para recoger los datos de salida, utilice los getters result(), resultAt(), o results().

Documentación de las funciones miembro

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

Construye un QThreadFunction con un parent dado .

[override virtual] QThreadFunction::~QThreadFunction()

Destruye el QThreadFunction. Si el QThreadFunction no está en marcha, no se realiza ninguna otra acción, en caso contrario se cancela el futuro asociado, y dependiendo de la sincronización automática retardada se realizan las siguientes acciones:

Sincronización automática retardadaAcción
EnEl QFuture asociado se almacena en el registro global. Utilice QThreadFunctionBase::syncAll() al salir de la aplicación para sincronizar todos los futuros almacenados previamente en el registro global.
DesactivadoSe ejecuta directamente una llamada de bloqueo a QFuture::waitForFinished().

Cuando la sincronización automática retardada está activada, la cancelación del futuro puede ser interceptada dentro de la función aún en ejecución en un hilo separado, para que pueda terminar lo antes posible sin completar su trabajo.

Finalmente, al salir de la aplicación, se debe llamar a QThreadFunctionBase::syncAll() para sincronizar todas las funciones que aún se estén ejecutando potencialmente en hilos separados. La llamada a QThreadFunctionBase::syncAll() es bloqueante en caso de que algunas funciones aún estén finalizando.

Nota: Cuando la sincronización automática retardada está activada, la función seguirá ejecutándose durante un tiempo después de que el destructor de QThreadFunction haya finalizado, por lo que es responsabilidad del usuario asegurarse de que todos los datos sobre los que puede operar la función siguen estando disponibles. Si esto no puede garantizarse, desactive la sincronización retardada automática a través de QThreadFunction::setAutoDelayedSync(false). En este caso, el destructor QThreadFunction esperará bloqueado a que la función finalice antes de borrar el QThreadFunction. Consulte la documentación de QCustomTask para obtener más información sobre el parámetro de plantilla Deleter.

Véase también setAutoDelayedSync() y syncAll().

QFuture<ResultType> QThreadFunction::future() const

Devuelve el QFuture<ResultType> asociado a la función ejecutada en un hilo independiente.

QFutureWatcher<ResultType> *QThreadFunction::futureWatcher()

Devuelve el puntero al QFutureWatcher<ResultType> asociado con la función ejecutada en un hilo separado. El tiempo de vida del observador devuelto está ligado a la instancia QThreadFunction.

Utilice esta función si necesita más control sobre la ejecución futura, por ejemplo, para conectarse a las señales de progreso del observador devuelto.

const QFutureWatcher<ResultType> *QThreadFunction::futureWatcher() const

Devuelve el puntero const al QFutureWatcher<ResultType> asociado a la función ejecutada en un hilo independiente.

Se trata de una función sobrecargada.

bool QThreadFunction::isAutoDelayedSync() const

Devuelve si la sincronización automática retardada está activada.

Véase también syncAll() y setAutoDelayedSync().

bool QThreadFunction::isDone() const

Devuelve si la ejecución de la función ha finalizado.

bool QThreadFunction::isResultAvailable() const

Devuelve si el resultado está listo.

Véase también result().

ResultType QThreadFunction::result() const

Devuelve el ResultType reportado por la función ejecutada en un hilo separado.

Nota: Asegúrese de que el resultado está listo llamando a isResultAvailable(), de lo contrario la llamada a result() puede bloquearse en caso de que el resultado no se haya reportado todavía, o incluso bloquearse en caso de que la ejecución de la función haya terminado sin reportar ningún resultado.

Véase también QFutureWatcher::result().

ResultType QThreadFunction::resultAt(int index) const

Devuelve el ResultType reportado por la función ejecutada en un hilo separado en index.

Véase también result() y QFutureWatcher::resultAt().

QList<ResultType> QThreadFunction::results() const

Devuelve la lista de ResultType reportados por la función ejecutada en un hilo separado.

Véase también result(), resultAt() y QFuture::results().

void QThreadFunction::setAutoDelayedSync(bool on)

Establece la sincronización automática retardada en on.

Por defecto, una sincronización automática retardada está activada, lo que significa que la destrucción del objeto QThreadFunction en ejecución no esperará en bloqueo hasta que la función que se ejecuta en un hilo separado finalice. En su lugar, se cancela el QFuture asociado, y la función se deja en ejecución hasta que finalice. La cancelación puede ser interceptada por la función que se ejecuta en un hilo separado a través del argumento QPromise, de modo que puede terminar antes de tiempo sin completar su trabajo. En caso de que la sincronización automática retardada esté activada, es necesario llamar a QThreadFunctionBase::syncAll() al salir de la aplicación, para sincronizar todas las funciones que posiblemente se estén ejecutando en hilos separados.

Cuando la sincronización automática retardada está desactivada, la sincronización se produce en el momento de la destrucción de QThreadFunction, lo que puede bloquear el subproceso que realiza la llamada durante un tiempo considerable.

La sincronización automática sólo se utiliza cuando QThreadFunction se ejecuta desde el hilo principal.

Véase también syncAll() y isAutoDelayedSync().

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

Establece el function que se ejecutará con args pasado en un hilo separado cuando se llame a start().

Véase también QtConcurrent::run().

void QThreadFunction::setThreadPool(QThreadPool *pool)

Establece el QThreadPool pool que se utilizará al ejecutar la llamada. Si el pool pasado es nullptr, se utiliza QThreadPool::globalInstance().

Véase también threadPool().

ResultType QThreadFunction::takeResult() const

Toma (mueve) el ResultType reportado por la función ejecutada en un hilo separado.

Nota: Asegúrese de que el resultado está listo llamando a isResultAvailable(), de lo contrario la llamada a takeResult() puede bloquearse en caso de que el resultado no haya sido reportado todavía, o incluso bloquearse en caso de que la ejecución de la función haya terminado sin reportar ningún resultado.

Véase también QFuture::takeResult().

QThreadPool *QThreadFunction::threadPool() const

Devuelve el grupo de hilos que se utiliza al ejecutar la llamada. Si se devuelve nullptr, se utiliza QThreadPool::globalInstance().

Véase también 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.