En esta página

Qt Concurrent

El módulo Qt Concurrent proporciona APIs de alto nivel que hacen posible escribir programas multihilo sin utilizar primitivas de threading de bajo nivel como mutexes, bloqueos de lectura-escritura, condiciones de espera o semáforos. Los programas escritos con Qt Concurrent ajustan automáticamente el número de hilos utilizados en función del número de núcleos de procesador disponibles. Esto significa que las aplicaciones escritas hoy seguirán escalando cuando se desplieguen en sistemas multinúcleo en el futuro.

Qt Concurrent incluye APIs de estilo de programación funcional para el procesamiento paralelo de listas, incluyendo una implementación de MapReduce y FilterReduce para sistemas de memoria compartida (no distribuidos), y clases para gestionar cálculos asíncronos en aplicaciones GUI:

Qt Concurrent admite varios tipos de contenedores e iteradores compatibles con STL, pero funciona mejor con contenedores Qt que tengan iteradores de acceso aleatorio, como QList. Las funciones map y filter aceptan tanto contenedores como iteradores begin/end.

Visión general del soporte de iteradores STL:

Tipo de iteradorClases de ejemploEstado de soporte
Iterador de entradaNo soportado
Iterador de salidaNo soportado
Iterador de reenvíostd::lista_de_avanceSoportado
Iterador bidireccionalstd::listaSoportado
Iterador de acceso aleatorioQListstd::vectorSoportado y recomendado

Los iteradores de acceso aleatorio pueden ser más rápidos en los casos en los que Qt Concurrent está iterando sobre un gran número de elementos ligeros, ya que permiten saltar a cualquier punto del contenedor. Además, el uso de iteradores de acceso aleatorio permite a Qt Concurrent proporcionar información de progreso a través de QFuture::progressValue() y QFutureWatcher::progressValueChanged().

Las funciones de modificación no in-place como mapped() y filtered() realizan una copia del contenedor cuando son llamadas. Si estás utilizando contenedores STL esta operación de copia puede tardar algún tiempo, en este caso recomendamos especificar los iteradores begin y end para el contenedor en su lugar.

Uso del módulo

Usar un módulo Qt requiere enlazar con la librería del módulo, ya sea directamente o a través de otras dependencias. Varias herramientas de compilación tienen soporte dedicado para esto, incluyendo CMake y qmake.

Construir con CMake

Utilice el comando find_package() para localizar los componentes del módulo necesarios en el paquete Qt6:

find_package(Qt6 REQUIRED COMPONENTS Concurrent)
target_link_libraries(mytarget PRIVATE Qt6::Concurrent)

Véase también la descripción general de la compilación con CMake.

Construcción con qmake

Para configurar el módulo para su compilación con qmake, añada el módulo como valor de la variable QT en el archivo .pro del proyecto:

QT += concurrent

Ejemplos

Evolución del módulo

Cambios en Qt Concurrent enumera los cambios importantes en la API del módulo y la funcionalidad que se hicieron para la serie Qt 6 de Qt.

Licencias

El módulo Qt Concurrent está disponible bajo licencias comerciales de The Qt Company. Además, está disponible bajo licencias de software libre: La GNU Lesser General Public License, versión 3, o la GNU General Public License, versión 2. Vea Licencias Qt para más detalles.

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