Multithread: criando threads de interface do usuário
Um thread da interface do usuário é usado para tratar a entrada do usuário e responder a eventos de usuário independentemente dos threads que executam outras partes do aplicativo. O thread principal do aplicativo (fornecido no CWinApp- classe derivada) já está criado e iniciado para você. Este tópico descreve as etapas necessárias para criar threads adicionais da interface do usuário.
A primeira coisa que você deve fazer ao criar um thread da interface do usuário é deve derivar uma classe de CWinThread. Você deve declarar e implementar essa classe, usando as macros de DECLARE_DYNCREATE e de IMPLEMENT_DYNCREATE . Essa classe deve substituir algumas funções e pode substituir outro. Essas funções e o que devem fazer são apresentadas na tabela a seguir.
Funções para substituir ao criar um thread da interface do usuário
Função |
Finalidade |
---|---|
Executar a limpeza quando o thread termina. Geralmente substituído. |
|
Executar a inicialização da instância do thread. Deve ser substituído. |
|
Executar o processamento de específico do tempo ocioso. Substituído normalmente não. |
|
Mensagens de filtro antes que sejam despachados a TranslateMessage e a DispatchMessage. Substituído normalmente não. |
|
Intercepte sem-tratamento as exceções lançadas pelos manipuladores de mensagem e do comando de thread. Substituído normalmente não. |
|
Função de controle para o thread. Contém a bomba da mensagem. Substituído com pouca frequência. |
MFC O fornece duas versões de AfxBeginThread com o sobrecarregamento do parâmetro: um que só pode criar threads de trabalho e um que pode criar threads ou threads de trabalho da interface do usuário. Para iniciar o thread da interface do usuário, chame a segunda sobrecarga de AfxBeginThread, fornecendo as seguintes informações:
RUNTIME_CLASS da classe que podem ser derivadas de CWinThread.
(Opcional) O nível de prioridade desejada. O padrão é prioridade normal. Para obter mais informações sobre os níveis de prioridade disponíveis, consulte SetThreadPriority em Windows SDK.
(Opcional) O tamanho desejado de pilha para o thread. O padrão é o mesmo tamanho de pilha do thread de criação.
(Opcional) CREATE_SUSPENDED se você deseja que o segmento seja criado em um estado suspenso. O padrão é 0 ou iniciar o thread normalmente.
(Opcional) Os atributos de segurança desejados. O padrão é o mesmo acesso que o thread pai. Para obter mais informações sobre o formato dessas informações de segurança, consulte ATRIBUTOS DE SEGURANÇA em Windows SDK.
AfxBeginThread faz a maioria do trabalho para você. Cria um novo objeto a partir da sua classe, para inicializá-lo com as informações que você fornece, e chame CWinThread::CreateThread para iniciar a execução do thread. As verificações são feitas durante qualquer procedimento para certificar-se que todos os objetos são desalocados corretamente se qualquer parte da falha de design.