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 |
---|---|
Execute a limpeza quando termina de thread. Geralmente substituído. |
|
Realiza inicialização de instância de thread. Deve ser substituído. |
|
Execute o processamento de tempo ocioso do segmento específico. Geralmente não são substituídas. |
|
Filtrar mensagens antes de serem distribuídos para TranslateMessage e DispatchMessage. Geralmente não são substituídas. |
|
Intercepte exceções sem tratamento lançadas por manipuladores de mensagens e comandos do segmento. Geralmente não são substituídas. |
|
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.