En esta página

QThreadPool Class

La clase QThreadPool gestiona una colección de QThreads. Más...

Cabecera: #include <QThreadPool>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Hereda: QObject

Nota: Todas las funciones de esta clase son thread-safe.

Propiedades

Funciones públicas

QThreadPool(QObject *parent = nullptr)
virtual ~QThreadPool()
int activeThreadCount() const
void clear()
(since 6.0) bool contains(const QThread *thread) const
int expiryTimeout() const
int maxThreadCount() const
void releaseThread()
void reserveThread()
(since 6.9) QThread::QualityOfService serviceLevel() const
void setExpiryTimeout(int expiryTimeout)
void setMaxThreadCount(int maxThreadCount)
(since 6.9) void setServiceLevel(QThread::QualityOfService serviceLevel)
void setStackSize(uint stackSize)
void setThreadPriority(QThread::Priority priority)
uint stackSize() const
void start(QRunnable *runnable, int priority = 0)
void start(Callable &&callableToRun, int priority = 0)
(since 6.3) void startOnReservedThread(QRunnable *runnable)
(since 6.3) void startOnReservedThread(Callable &&callableToRun)
QThread::Priority threadPriority() const
bool tryStart(QRunnable *runnable)
bool tryStart(Callable &&callableToRun)
bool tryTake(QRunnable *runnable)
(since 6.8) bool waitForDone(QDeadlineTimer deadline = QDeadlineTimer::Forever)
bool waitForDone(int msecs)

Miembros públicos estáticos

QThreadPool *globalInstance()

Descripción detallada

QThreadPool gestiona y recicla objetos individuales QThread para ayudar a reducir los costes de creación de hilos en programas que utilizan hilos. Cada aplicación Qt tiene un objeto QThreadPool global, al que se puede acceder llamando a globalInstance().

Para usar uno de los hilos de QThreadPool, subclase QRunnable e implemente la función virtual run(). Luego crea un objeto de esa clase y pásalo a QThreadPool::start().

clase TareaHolaMundo : public QRunnable
{ void run() override    {
        qDebug() << "Hello world from thread" << QThread::currentThread();
    } };int main() { //...HelloWorldTask *hola = new HelloWorldTask(); // QThreadPool toma posesión y borra 'hola' automáticamente   QThreadPool::globalInstance()->start(hola); //...}

QThreadPool borra el QRunnable automáticamente por defecto. Use QRunnable::setAutoDelete() para cambiar la bandera de auto-borrado.

QThreadPool soporta ejecutar el mismo QRunnable más de una vez llamando a tryStart(this) desde dentro de QRunnable::run(). Si autoDelete está habilitado el QRunnable será borrado cuando el último thread salga de la función de ejecución. Llamar a start() varias veces con el mismo QRunnable cuando autoDelete está habilitado crea una condición de carrera y no se recomienda.

Los hilos que no se utilicen durante un cierto tiempo expirarán. El tiempo de expiración por defecto es de 30000 milisegundos (30 segundos). Esto puede cambiarse usando setExpiryTimeout(). Establecer un tiempo de expiración negativo desactiva el mecanismo de expiración.

Llama a maxThreadCount() para consultar el número máximo de hilos a utilizar. Si es necesario, puede cambiar el límite con setMaxThreadCount(). Por defecto, maxThreadCount() es QThread::idealThreadCount(). La función activeThreadCount() devuelve el número de hilos que están trabajando actualmente.

La función reserveThread() reserva un hilo para uso externo. Utilice releaseThread() cuando haya terminado con el hilo, para poder reutilizarlo. Esencialmente, estas funciones aumentan o reducen temporalmente el número de hilos activos y son útiles cuando se implementan operaciones que consumen mucho tiempo y que no son visibles para QThreadPool.

Tenga en cuenta que QThreadPool es una clase de bajo nivel para la gestión de hilos, consulte el módulo Qt Concurrent para alternativas de más alto nivel.

Ver también QRunnable.

Documentación de Propiedades

[read-only] activeThreadCount : int

Esta propiedad contiene el número de hilos activos en el pool de hilos.

Nota: Es posible que esta función devuelva un valor mayor que maxThreadCount(). Véase reserveThread() para más detalles.

Funciones de acceso:

int activeThreadCount() const

Véase también reserveThread() y releaseThread().

expiryTimeout : int

Esta propiedad contiene el valor del tiempo de expiración del hilo en milisegundos.

Los subprocesos que no se utilicen durante expiryTimeout milisegundos se considerarán caducados y se cerrarán. Estos hilos se reiniciarán cuando sea necesario. Por defecto expiryTimeout es 30000 milisegundos (30 segundos). Si expiryTimeout es negativo, los hilos recién creados no expirarán, por ejemplo, no saldrán hasta que el pool de hilos sea destruido.

Tenga en cuenta que la configuración de expiryTimeout no tiene ningún efecto sobre los subprocesos que ya se están ejecutando. Sólo los hilos recién creados utilizarán el nuevo expiryTimeout. Recomendamos configurar expiryTimeout inmediatamente después de crear el grupo de hilos, pero antes de llamar a start().

Funciones de acceso:

int expiryTimeout() const
void setExpiryTimeout(int expiryTimeout)

maxThreadCount : int

Esta propiedad contiene el número máximo de hilos utilizados por el pool de hilos. Esta propiedad tendrá por defecto el valor de QThread::idealThreadCount() en el momento en que se cree el objeto QThreadPool.

Nota: El pool de hebras siempre utilizará al menos 1 hebra, incluso si el límite de maxThreadCount es cero o negativo.

El valor por defecto de maxThreadCount es QThread::idealThreadCount().

Funciones de acceso:

int maxThreadCount() const
void setMaxThreadCount(int maxThreadCount)

stackSize : uint

Esta propiedad contiene el tamaño de la pila para los subprocesos de los trabajadores del grupo de subprocesos.

El valor de la propiedad sólo se utiliza cuando el pool de hebras crea nuevas hebras. Cambiarlo no tiene ningún efecto para los subprocesos ya creados o en ejecución.

El valor por defecto es 0, lo que hace que QThread utilice el tamaño de pila por defecto del sistema operativo.

Funciones de acceso:

uint stackSize() const
void setStackSize(uint stackSize)

[since 6.2] threadPriority : QThread::Priority

Esta propiedad contiene la prioridad de los nuevos subprocesos.

El valor de la propiedad sólo se utiliza cuando el grupo de hebras inicia nuevas hebras. Cambiarlo no tiene ningún efecto para los subprocesos que ya se están ejecutando.

El valor por defecto es QThread::InheritPriority, lo que hace que QThread utilice la misma prioridad en la que se encuentra el objeto QThreadPool.

Esta propiedad se introdujo en Qt 6.2.

Funciones de acceso:

QThread::Priority threadPriority() const
void setThreadPriority(QThread::Priority priority)

Véase también QThread::Priority.

Documentación de funciones miembro

QThreadPool::QThreadPool(QObject *parent = nullptr)

Crea un grupo de hilos con la dirección parent.

[virtual noexcept] QThreadPool::~QThreadPool()

Destruye el QThreadPool. Esta función se bloqueará hasta que se hayan completado todos los ejecutables.

void QThreadPool::clear()

Elimina de la cola las ejecutables que aún no se han iniciado. Se eliminan las ejecutables para las que runnable->autoDelete() devuelve true.

Véase también start().

[since 6.0] bool QThreadPool::contains(const QThread *thread) const

Devuelve true si thread es un hilo gestionado por este grupo de hilos.

Esta función se introdujo en Qt 6.0.

[static] QThreadPool *QThreadPool::globalInstance()

Devuelve la instancia global de QThreadPool.

void QThreadPool::releaseThread()

Libera un hilo previamente reservado por una llamada a reserveThread().

Nota: Llamar a esta función sin haber reservado previamente un hilo aumenta temporalmente maxThreadCount(). Esto es útil cuando un hilo entra en reposo esperando más trabajo, permitiendo que otros hilos continúen. Asegúrese de llamar a reserveThread() cuando termine de esperar, para que el pool de hilos pueda mantener correctamente activeThreadCount().

Véase también reserveThread().

void QThreadPool::reserveThread()

Reserva un hilo, sin tener en cuenta activeThreadCount() y maxThreadCount().

Una vez que hayas terminado con el hilo, llama a releaseThread() para permitir su reutilización.

Nota: Incluso reservando maxThreadCount() hilos o más, el pool de hilos seguirá permitiendo un mínimo de un hilo.

Nota: Esta función incrementará el número de hilos activos. Esto significa que al utilizar esta función, es posible que activeThreadCount() devuelva un valor mayor que maxThreadCount() .

Véase también releaseThread().

[since 6.9] QThread::QualityOfService QThreadPool::serviceLevel() const

Devuelve el nivel actual de Calidad de Servicio del hilo.

Esta función se introdujo en Qt 6.9.

Véase también setServiceLevel() y QThread::serviceLevel().

[since 6.9] void QThreadPool::setServiceLevel(QThread::QualityOfService serviceLevel)

Establece el nivel de Calidad de Servicio de los objetos hilo creados después de la llamada a este setter en serviceLevel.

El soporte no está disponible en todas las plataformas. Consulte QThread::setServiceLevel() para más detalles.

Esta función se introdujo en Qt 6.9.

Véase también serviceLevel() y QThread::serviceLevel().

void QThreadPool::start(QRunnable *runnable, int priority = 0)

Reserva un subproceso y lo utiliza para ejecutar runnable, a menos que este subproceso haga que el número actual de subprocesos supere maxThreadCount(). En ese caso, runnable se añade a una cola de ejecución. El argumento priority puede utilizarse para controlar el orden de ejecución de la cola de ejecución.

Tenga en cuenta que el grupo de hilos toma posesión de runnable si runnable->autoDelete() devuelve true, y runnable será eliminado automáticamente por el grupo de hilos después de que runnable->run() devuelva. Si runnable->autoDelete() devuelve false, la propiedad de runnable permanece con el que llama. Tenga en cuenta que cambiar el auto-borrado en runnable después de llamar a esta función resulta en un comportamiento indefinido.

template <typename Callable, QRunnable::if_callable<Callable> = true> void QThreadPool::start(Callable &&callableToRun, int priority = 0)

Reserva un subproceso y lo utiliza para ejecutar callableToRun, a menos que este subproceso haga que el número actual de subprocesos supere maxThreadCount(). En ese caso, callableToRun se añade a una cola de ejecución. El argumento priority puede utilizarse para controlar el orden de ejecución de la cola de ejecución.

Nota: En versiones de Qt anteriores a la 6.6, esta función tomaba std::function<void()>, y por lo tanto no podía manejar llamadas de sólo movimiento.

Restricciones

Participa en la resolución de sobrecargas sólo si Callable es una función u objeto de función que puede llamarse con cero argumentos.

Se trata de una función sobrecargada.

[since 6.3] void QThreadPool::startOnReservedThread(QRunnable *runnable)

Libera un hilo previamente reservado con reserveThread() y lo utiliza para ejecutar runnable.

Tenga en cuenta que el repositorio de hilos toma la propiedad de runnable si runnable->autoDelete() devuelve true, y runnable será eliminado automáticamente por el repositorio de hilos tras la devolución de runnable->run(). Si runnable->autoDelete() devuelve false, la propiedad de runnable permanece con el que llama. Tenga en cuenta que cambiar el auto-borrado en runnable después de llamar a esta función resulta en un comportamiento indefinido.

Nota: Llamar a esta función cuando no hay hilos reservados resulta en un comportamiento indefinido.

Esta función se introdujo en Qt 6.3.

Véase también reserveThread() y start().

[since 6.3] template <typename Callable, QRunnable::if_callable<Callable> = true> void QThreadPool::startOnReservedThread(Callable &&callableToRun)

Libera un hilo previamente reservado con reserveThread() y lo utiliza para ejecutar callableToRun.

Nota: En versiones de Qt anteriores a la 6.6, esta función tomaba std::function<void()>, y por lo tanto no podía manejar callables de sólo movimiento.

Restricciones

Participa en la resolución de sobrecargas sólo si Callable es una función u objeto de función que puede ser llamado con cero argumentos.

Se trata de una función sobrecargada.

Esta función se introdujo en Qt 6.3.

bool QThreadPool::tryStart(QRunnable *runnable)

Intenta reservar un subproceso para ejecutar runnable.

Si no hay subprocesos disponibles en el momento de la llamada, esta función no hace nada y devuelve false. En caso contrario, runnable se ejecuta inmediatamente utilizando un subproceso disponible y esta función devuelve true.

Tenga en cuenta que, en caso de éxito, el grupo de hilos toma posesión de runnable si runnable->autoDelete() devuelve true, y runnable será eliminado automáticamente por el grupo de hilos tras la devolución de runnable->run(). Si runnable->autoDelete() devuelve false, la propiedad de runnable permanece con el que llama. Tenga en cuenta que cambiar el auto-borrado en runnable después de llamar a esta función resulta en un comportamiento indefinido.

template <typename Callable, QRunnable::if_callable<Callable> = true> bool QThreadPool::tryStart(Callable &&callableToRun)

Intenta reservar un subproceso para ejecutar callableToRun.

Si no hay subprocesos disponibles en el momento de la llamada, esta función no hace nada y devuelve false. En caso contrario, callableToRun se ejecuta inmediatamente utilizando un subproceso disponible y esta función devuelve true.

Nota: En versiones de Qt anteriores a la 6.6, esta función tomaba std::function<void()>, y por lo tanto no podía manejar llamadas de sólo movimiento.

Restricciones

Participa en la resolución de sobrecargas sólo si Callable es una función u objeto de función que puede ser llamado con cero argumentos.

Se trata de una función sobrecargada.

bool QThreadPool::tryTake(QRunnable *runnable)

Intenta eliminar el runnable especificado de la cola si aún no se ha iniciado. Si la ejecutable no se ha iniciado, devuelve true, y la propiedad de runnable se transfiere a la persona que llama (incluso cuando runnable->autoDelete() == true). En caso contrario, devuelve false.

Nota: Si runnable->autoDelete() == true, esta función puede eliminar el runnable equivocado. Esto se conoce como el problema ABA: el runnable original puede haberse ejecutado ya y haber sido borrado. La memoria se reutiliza para otro ejecutable, que se elimina en lugar del previsto. Por esta razón, recomendamos llamar a esta función sólo para ejecutables que no se autoeliminen.

Véase también start() y QRunnable::autoDelete().

[since 6.8] bool QThreadPool::waitForDone(QDeadlineTimer deadline = QDeadlineTimer::Forever)

Espera hasta que deadline expira para que todos los hilos salgan y elimina todos los hilos del pool de hilos. Devuelve true si se han eliminado todos los subprocesos; en caso contrario, devuelve false.

Esta función se introdujo en Qt 6.8.

bool QThreadPool::waitForDone(int msecs)

Espera hasta msecs milisegundos para que todos los hilos salgan y elimina todos los hilos del pool de hilos. Devuelve true si se han eliminado todos los subprocesos; en caso contrario, devuelve false. Si msecs es -1, esta función espera a que salga el último subproceso.

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