Cómo utilizar el grupo de subprocesos en QT

Grupo de subprocesos de Qt Blog-CSDN de QThreadPool_fearlazy

Los subprocesos pueden ayudarnos a manejar operaciones que requieren mucho tiempo para evitar que la interfaz se bloquee y también pueden mejorar la concurrencia del programa. Pero cuantos más subprocesos cree, mejor, porque crear, destruir y cambiar subprocesos consume recursos. La aparición de la tecnología de grupo de subprocesos tiene como objetivo resolver este problema. El grupo de subprocesos mantiene una cierta cantidad de subprocesos y los utiliza por completo. La clase de grupo de subprocesos encapsulada por Qt es QThreadPool, y su uso requiere la cooperación de QRunnable. Un resumen de los pasos de uso es el siguiente:

    1. Derive una clase de QRunnable y reescriba la función run(). Coloque el trabajo que debe realizar el subproceso secundario en la función de ejecución.

    2. Llame a start () de QThreadPool para comenzar a trabajar. El parámetro de inicio es el puntero de la subclase QRunnable.

     

    Los pasos son muy simples, solo escribe un ejemplo .

    1. Utilice QtCreator para crear un nuevo proyecto basado en QWidget.

    2. Cree una nueva clase CTask, heredando de QRunnable. y reescribir la función de ejecución

3. Cree un objeto QThreadPool en el widget y utilícelo para iniciar 10 tareas.

  resultado de la operación:

 

Puede ver que la tarea recién creada se ejecuta en el subproceso secundario. Es gratificante, pero ¿parece que algo anda mal? Hay varios hilos que están duplicados. Sí, porque el número máximo de subprocesos para este grupo de subprocesos es 4. El número máximo de subprocesos se puede establecer mediante setMaxThreadCount.

    El grupo de subprocesos eliminará automáticamente el objeto de la tarea (CTask nuevo al inicio) después de ejecutar la tarea, a menos que use setAutoDelete (falso). QRunnable solo puede hacer esto excepto ejecutar. La siguiente imagen es una prueba.

 El último punto a mencionar es que Qt crea un objeto de grupo de subprocesos para cada QApplication, y este objeto se puede obtener a través de la función miembro estática globalInstance () de QThreadPool. No te preocupes, simplemente recógelo y úsalo, no seré responsable si algo sale mal.

Otro artículo que explica cada parámetro en detalle:

https://wobushixiaohai.blog.csdn.net/article/details/116735494 icono-default.png?t=N176https://wobushixiaohai.blog.csdn.net/article/details/116735494

 

Supongo que te gusta

Origin blog.csdn.net/thanklife/article/details/129333413
Recomendado
Clasificación