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 apartment-threaded ou multithreaded.
Syntax
typedef enum tagCOINIT {
COINIT_APARTMENTTHREADED = 0x2,
COINIT_MULTITHREADED = 0x0,
COINIT_DISABLE_OLE1DDE = 0x4,
COINIT_SPEED_OVER_MEMORY = 0x8
} COINIT;
Constantes
COINIT_APARTMENTTHREADED Valor: 0x2 Inicializa o thread para simultaneidade de objeto apartment-threaded (consulte Comentários). |
COINIT_MULTITHREADED Valor: 0x0 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 multithreaded 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 free-threading) permite que chamadas para métodos de objetos criados por esse thread sejam executadas 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).
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
IInitializeSpy::P ostInitialize