Partilhar via


Multithread com C++ e MFC

A biblioteca Microsoft Foundation Class (MFC) oferece suporte a aplicativos multithread. Este tópico descreve processos e threads, bem como a abordagem do MFC para multithreading.

Um processo é uma instância em execução de um aplicativo. Por exemplo, quando você clica duas vezes no ícone do Bloco de Notas, inicia um processo que executa o Bloco de Notas.

Um thread é a unidade básica de execução dentro de um processo. Quando você inicia o Bloco de Notas, o sistema operacional cria um processo e começa executando o thread primário desse processo. Quando esse thread termina, o processo também termina. Esse thread primário é fornecido ao sistema operacional pelo código de inicialização na forma de um endereço de função. Normalmente, é o endereço da função main ou WinMain que é fornecido.

Você pode criar threads adicionais em seu aplicativo, se desejar. Talvez você queira fazer isso para lidar com tarefas de plano de fundo ou manutenção quando não quiser que o usuário aguarde a conclusão. Todos os threads em aplicativos MFC são representados por objetos CWinThread. Na maioria das situações, você nem precisa criar explicitamente esses objetos; em vez disso, chame a função auxiliar da estrutura AfxBeginThread, que cria o CWinThread objeto para você.

O MFC distingue dois tipos de threads: threads da interface do usuário e threads de trabalho. Os threads da interface do usuário são comumente usados para lidar com a entrada do usuário e responder a eventos e mensagens gerados pelo usuário. Os threads de trabalho costumam ser usados para concluir tarefas, como recálculo, que não exigem entrada do usuário. A API Do Win32 não distingue os tipos de threads; ela só precisa saber o endereço inicial do thread para que possa começar a executar o thread. O MFC lida especialmente com threads da interface do usuário fornecendo uma bomba de mensagem para eventos na interface do usuário. CWinApp é um exemplo de um objeto de thread da interface do usuário, pois ele deriva de CWinThread e manipula eventos e mensagens gerados pelo usuário.

Atenção especial deve ser dada a situações em que mais de um thread pode exigir acesso ao mesmo objeto. Multithreading: Dicas de programação descreve técnicas que você pode usar para contornar os problemas que podem surgir nessas situações. Multithreading: Como usar as classes de sincronização de dados descreve como usar as classes disponíveis para sincronizar o acesso de vários threads a um único objeto.

Escrever e depurar programação multithread é inerentemente uma tarefa complicada, pois você deve garantir que os objetos não sejam acessados por mais de um thread por vez. Os tópicos multithread não ensinam as noções básicas da programação em multithread, mas apenas como usar o MFC em seu programa multithread. Os exemplos de MFC com multithread incluídos no Visual C++ ilustram algumas funcionalidades de adição com multithread e APIs Win32 não englobadas pelo MFC; no entanto, eles só se destinam a ser um ponto de partida.

Para obter mais informações sobre como o sistema operacional lida com processos e threads, consulte Processos e Threads no SDK do Windows.

Para obter mais informações sobre o suporte a multithreading no MFC, consulte os tópicos a seguir:

Confira também

Suporte de multithreading para código anterior (Visual C++)