Enumeración COINIT (objbase.h)

Determina el modelo de simultaneidad usado para las llamadas entrantes a objetos creados por este subproceso. Este modelo de simultaneidad puede ser subproceso de apartamento o multiproceso.

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 el subproceso para la simultaneidad de objetos de subproceso de apartamento (vea Comentarios).
COINIT_MULTITHREADED
Inicializa el subproceso para la simultaneidad de objetos multiproceso (vea Comentarios).
COINIT_DISABLE_OLE1DDE
Valor: 0x4
Deshabilita la compatibilidad con DDE para OLE1.
COINIT_SPEED_OVER_MEMORY
Valor: 0x8
Aumente el uso de memoria en un intento de aumentar el rendimiento.

Comentarios

Cuando se inicializa un subproceso a través de una llamada a CoInitializeEx, se elige si se inicializa como subproceso de apartamento o multiproceso mediante la designación de uno de los miembros de COINIT como segundo parámetro. Esto designa cómo se controlan las llamadas entrantes a cualquier objeto creado por ese subproceso, es decir, la simultaneidad del objeto.

Subprocesos de apartamento, al tiempo que permite varios subprocesos de ejecución, serializa todas las llamadas entrantes al requerir que las llamadas a métodos de objetos creados por este subproceso siempre se ejecuten en el mismo subproceso, es decir, el apartamento o subproceso que los creó. Además, las llamadas solo pueden llegar a los límites de la cola de mensajes. Debido a esta serialización, normalmente no es necesario escribir el control de simultaneidad en el código del objeto, aparte de evitar llamadas a PeekMessage y SendMessage durante el procesamiento que no deben interrumpir otras invocaciones de método o llamadas a otros objetos en el mismo apartamento o subproceso.

El subproceso múltiple (también denominado subproceso libre) permite llamar a métodos de objetos creados por este subproceso para ejecutarse en cualquier subproceso. No hay ninguna serialización de llamadas, es decir, muchas llamadas pueden producirse en el mismo método o en el mismo objeto o simultáneamente. La simultaneidad de objetos multiproceso ofrece el máximo rendimiento y aprovecha la mejor ventaja del hardware de varios procesadores para las llamadas entre subprocesos, entre procesos y entre equipos, ya que las llamadas a objetos no se serializan de ninguna manera. Sin embargo, esto significa que el código de los objetos debe aplicar su propio modelo de simultaneidad, normalmente mediante el uso de primitivos de sincronización, como secciones críticas, semáforos o exclusión mutua. Además, dado que el objeto no controla la duración de los subprocesos a los que accede, no se puede almacenar ningún estado específico del subproceso en el objeto (en Almacenamiento local de subprocesos).

Nota El apartamento multiproceso está diseñado para su uso por subprocesos que no son de GUI. Los subprocesos de apartamentos multiproceso no deben realizar acciones de interfaz de usuario. Esto se debe a que los subprocesos de interfaz de usuario requieren una bomba de mensajes y COM no bombea mensajes para subprocesos en un apartamento multiproceso.
 

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado objbase.h

Consulte también

CoInitializeEx

IInitializeSpy::P ostInitialize

IInitializeSpy::P reInitialize

Procesos, subprocesos y apartamentos