Partilhar via


Multithreading: Criando threads de User-Interface MFC

Um thread de interface do usuário é comumente usado para manipular a entrada do usuário e responder a eventos do usuário independentemente dos threads que executam outras partes do aplicativo. O tópico principal do aplicativo (fornecido na sua classe derivada CWinApp) já foi criado e iniciado para si. 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 de interface do usuário é derivar uma classe de CWinThread. Você deve declarar e implementar essa classe, usando as macros DECLARE_DYNCREATE e IMPLEMENT_DYNCREATE . Essa classe deve substituir algumas funções e pode substituir outras. Essas funções e o que elas devem fazer são apresentadas na tabela a seguir.

Funções a serem substituídas ao criar um thread de User-Interface

Função Propósito
ExitInstance Execute a limpeza quando o thread terminar. Geralmente substituído.
InitInstance Realizar a inicialização da instância do thread. Deve ser substituído.
OnIdle Execute o processamento de tempo ocioso específico do thread. Geralmente não é substituído.
PreTranslateMessage Filtre as mensagens antes que elas sejam enviadas para TranslateMessage e DispatchMessage. Geralmente não é substituído.
ProcessWndProcException Intercete exceções não tratadas lançadas pelos manipuladores de mensagens e comandos do thread. Geralmente não é substituído.
Executar Função de controle para o thread. Contém a bomba de mensagem. Raramente substituído.

MFC fornece duas versões através de sobrecarga de parâmetros: uma que só pode criar threads de trabalho e outra que pode criar threads de interface de utilizador ou de trabalho. Para iniciar o thread da interface do usuário, chame a segunda sobrecarga de AfxBeginThread, fornecendo as seguintes informações:

  • O RUNTIME_CLASS da classe que você derivou do CWinThread.

  • (Opcional) O nível de prioridade desejado. O padrão é prioridade normal. Para obter mais informações sobre os níveis de prioridade disponíveis, consulte SetThreadPriority no SDK do Windows.

  • (Opcional) O tamanho de pilha desejado para o thread. O padrão é uma pilha do mesmo tamanho que a thread de criação.

  • (Opcional) CREATE_SUSPENDED se você quiser que o thread seja criado em um estado suspenso. O padrão é 0 ou inicie 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 SECURITY_ATTRIBUTES no SDK do Windows.

AfxBeginThread faz a maior parte do trabalho por si. Ele cria um novo objeto de sua classe, inicializa-o com as informações fornecidas e chama CWinThread::CreateThread para iniciar a execução do thread. As verificações são feitas durante todo o procedimento para garantir que todos os objetos sejam desalocados corretamente caso alguma parte da criação falhe.

Sobre o que quer saber mais?

Ver também

Multithreading com C++ e MFC