Enumeração COINIT (objbase.h)

Determina o modelo de simultaneidade usado para chamadas de entrada para objetos criados por esse thread. Esse modelo de simultaneidade pode ser threaded apartment ou multithreaded.

Syntax

typedef enum tagCOINIT {
  COINIT_APARTMENTTHREADED = 0x2,
  COINIT_MULTITHREADED,
  COINIT_DISABLE_OLE1DDE = 0x4,
  COINIT_SPEED_OVER_MEMORY = 0x8
} COINIT;

Constantes

 
COINIT_APARTMENTTHREADED
Valor: 0x2
Inicializa o thread para simultaneidade de objeto threaded apartment (consulte Comentários).
COINIT_MULTITHREADED
Inicializa o thread para simultaneidade de objeto multithread (consulte Comentários).
COINIT_DISABLE_OLE1DDE
Valor: 0x4
Desabilita o DDE para suporte ao OLE1.
COINIT_SPEED_OVER_MEMORY
Valor: 0x8
Aumente o uso de memória na tentativa de aumentar o desempenho.

Comentários

Quando um thread é inicializado por meio de uma chamada para CoInitializeEx, você escolhe se deseja inicializá-lo como apartment-threaded ou multithread designando um dos membros do COINIT como seu segundo parâmetro. Isso designa como as chamadas de entrada para qualquer objeto criado por esse thread são tratadas, ou seja, a simultaneidade do objeto.

O apartment-threading, ao mesmo tempo que permite vários threads de execução, serializa todas as chamadas de entrada exigindo que as chamadas para métodos de objetos criados por esse thread sempre sejam executadas no mesmo thread, ou seja, o apartment/thread que as criou. Além disso, as chamadas só podem chegar aos limites da fila de mensagens. Devido a essa serialização, normalmente não é necessário gravar o controle de simultaneidade no código do objeto, além de evitar chamadas para PeekMessage e SendMessage durante o processamento que não devem ser interrompidas por outras invocações de método ou chamadas para outros objetos no mesmo apartment/thread.

O multi-threading (também chamado de threading livre) permite que chamadas a métodos de objetos criados por esse thread sejam executados em qualquer thread. Não há serialização de chamadas, ou seja, muitas chamadas podem ocorrer para o mesmo método ou para o mesmo objeto ou simultaneamente. A simultaneidade de objetos multi-threaded oferece o melhor desempenho e aproveita melhor o hardware multiprocessador para chamadas entre threads, entre processos e entre computadores, já que as chamadas para objetos não são serializadas de forma alguma. Isso significa, no entanto, que o código para objetos deve impor seu próprio modelo de simultaneidade, normalmente por meio do uso de primitivos de sincronização, como seções críticas, semáforos ou mutexes. Além disso, como o objeto não controla o tempo de vida dos threads que o estão acessando, nenhum estado específico do thread pode ser armazenado no objeto (no Armazenamento Local do Thread).

Nota O apartment multi-threaded destina-se a ser usado por threads não GUI. Os threads em apartamentos com vários threads não devem executar ações de interface do usuário. Isso ocorre porque os threads de interface do usuário exigem uma bomba de mensagem e o COM não bombeia mensagens para threads em um apartamento com vários threads.
 

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho objbase.h

Confira também

Coinitializeex

IInitializeSpy::P ostInitialize

IInitializeSpy::P reInitialize

Processos, threads e apartamentos