Como usar o pool de threads no QT

Pool de threads do Qt QThreadPool_fearlazy's blog-blog CSDN

Threads podem nos ajudar a lidar com operações demoradas para evitar travamentos da interface e também podem melhorar a simultaneidade do programa. Mas quanto mais threads você criar, melhor, porque criar, destruir threads e trocar threads consome recursos. O surgimento da tecnologia de pool de threads é para resolver esse problema. O pool de threads mantém um certo número de threads e os utiliza totalmente. A classe do pool de threads encapsulada pelo Qt é QThreadPool e seu uso requer a cooperação do QRunnable. Um resumo das etapas de uso é o seguinte:

    1. Derive uma classe de QRunnable e reescreva a função run(). Coloque o trabalho que precisa ser feito pelo thread filho na função run.

    2. Chame start() do QThreadPool para começar a trabalhar. O parâmetro de start é o ponteiro da subclasse QRunnable.

     

    Os passos são muito simples, basta escrever um exemplo .

    1. Use QtCreator para criar um novo projeto baseado em QWidget.

    2. Crie uma nova classe CTask, herdada de QRunnable. e reescreva a função run

3. Crie um objeto QThreadPool no Widget e utilize-o para iniciar 10 tarefas.

  resultado da operação:

 

Você pode ver que a tarefa recém-criada é executada no thread filho. É gratificante, mas algo parece estar errado? Existem vários tópicos duplicados. Sim porque o número máximo de threads para este pool de threads é 4. O número máximo de threads pode ser definido por setMaxThreadCount.

    O pool de threads excluirá automaticamente o objeto de tarefa (CTask novo no início) após a execução da tarefa, a menos que você use setAutoDelete(false). QRunnable só pode fazer isso, exceto em execução. A imagem abaixo é a prova.

 O último ponto a ser mencionado é que o Qt cria um objeto de pool de threads para cada QApplication, e esse objeto pode ser obtido por meio da função de membro estático globalInstance() de QThreadPool. Não se preocupe, basta pegá-lo e usá-lo. Não serei responsável se algo der errado.

Outro artigo explicando cada parâmetro em detalhes:

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

 

Acho que você gosta

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