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: