QtTaskTree::QThreadFunction Class
template <typename ResultType> class QtTaskTree::QThreadFunctionUna 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 retardada | Acción |
|---|---|
| En | El 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. |
| Desactivado | Se 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.