Multithreading: A criação de Threads de Interface do usuário

Um segmento de interface de usuário usado para manipular a entrada do usuário e responder a eventos de usuário, independentemente de outras partes do aplicativo em execução de segmentos. O segmento do aplicativo principal (fornecido no seu CWinApp-classe derivada) é criado e iniciado para que você já. Este tópico descreve as etapas necessárias para criar os segmentos adicionais da interface do usuário.

A primeira coisa que você deve fazer ao criar um segmento de interface do usuário é derivar uma classe de CWinThread. Você deve declarar e implementar isso de classe, usando o DECLARE_DYNCREATE e IMPLEMENT_DYNCREATE macros. Essa classe deve substituir algumas funções e pode substituir outras pessoas. Essas funções e o que deve fazer são apresentados na tabela a seguir.

Funções para substituir ao criar um segmento de Interface do usuário

Function

Purpose

ExitInstance

Execute a limpeza quando termina de thread. Geralmente substituído.

CWinAppEx

Realiza inicialização de instância de thread. Deve ser substituído.

OnIdle

Execute o processamento de tempo ocioso do segmento específico. Geralmente não são substituídas.

PreTranslateMessage

Filtrar mensagens antes de serem distribuídos para TranslateMessage e DispatchMessage. Geralmente não são substituídas.

ProcessWndProcException

Intercepte exceções sem tratamento lançadas por manipuladores de mensagens e comandos do segmento. Geralmente não são substituídas.

Run

Controlando a função para o segmento. Contém o bombardeamento de mensagens. Raramente substituído.

MFC fornece duas versões do AfxBeginThread por meio de sobrecarga de parâmetro: uma para os segmentos de interface do usuário e outro para threads de trabalho. Para iniciar o thread de interface do usuário, chamada AfxBeginThread, fornecendo as seguintes informações:

  • O RUNTIME_CLASS da classe é derivada de CWinThread.

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

  • (Opcional) O tamanho de pilha desejada para o segmento. O padrão é a mesma pilha de tamanho do segmento de criação.

  • (Opcional) CREATE_SUSPENDED se você desejar que o segmento a ser criado em um estado suspenso. O padrão é 0 ou iniciar o thread normalmente.

  • (Opcional) Os atributos de segurança desejado. O padrão é o mesmo acesso que o thread do pai. Para obter mais informações sobre o formato dessas informações de segurança, consulte SECURITY_ATTRIBUTES na Windows SDK.

AfxBeginThreadfaz a maior parte do trabalho para você. Cria um novo objeto de sua classe, ele inicializa com as informações fornecidas e chamadas CWinThread::CreateThread para iniciar o thread em execução. As verificações são feitas durante o procedimento para certificar-se de que todos os objetos são liberados adequadamente caso de falha de qualquer parte da criação.

O que você deseja saber mais a respeito?

Consulte também

Conceitos

Multithreading com C++ e MFC