Перечисление COINIT (objbase.h)

Определяет модель параллелизма, используемую для входящих вызовов объектов, созданных этим потоком. Эта модель параллелизма может быть либо многопоточной, либо многопоточной.

Синтаксис

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

Константы

 
COINIT_APARTMENTTHREADED
Значение: 0x2
Инициализирует поток для параллелизма объекта с потоком в отдельном потоке (см. примечания).
COINIT_MULTITHREADED
Инициализирует поток для параллелизма многопоточных объектов (см. примечания).
COINIT_DISABLE_OLE1DDE
Значение: 0x4
Отключает DDE для поддержки OLE1.
COINIT_SPEED_OVER_MEMORY
Значение: 0x8
Увеличьте использование памяти при попытке увеличить производительность.

Комментарии

Когда поток инициализируется с помощью вызова CoInitializeEx, вы выбираете, следует ли инициализировать его в виде многопоточного или многопоточного потока, назначив один из членов COINIT в качестве второго параметра. Это указывает, как обрабатываются входящие вызовы любого объекта, созданного этим потоком, то есть параллелизма объекта.

Потоки apartment-threading, допуская несколько потоков выполнения, сериализуют все входящие вызовы, требуя, чтобы вызовы методов объектов, созданных этим потоком, всегда выполнялись в одном потоке, т. е. в том же потоке, который их создал. Кроме того, вызовы могут поступать только через границы очереди сообщений. Из-за такой сериализации обычно не требуется записывать управление параллелизмом в код для объекта, кроме как избегать вызовов PeekMessage и SendMessage во время обработки, которые не должны прерываться вызовами других методов или вызовами других объектов в том же объекте или потоке.

Многопоточность (также называемая свободным потоком) позволяет выполнять вызовы методов объектов, созданных этим потоком, в любом потоке. Сериализация вызовов не выполняется, т. е. многие вызовы могут выполняться в один и тот же метод, к одному и тому же объекту или одновременно. Параллелизм многопоточных объектов обеспечивает самую высокую производительность и использует лучшее преимущество многопроцессорного оборудования для межпотоковых, межпроцессных и межмашинных вызовов, так как вызовы объектов не сериализуются каким-либо образом. Это означает, однако, что код для объектов должен применять собственную модель параллелизма, как правило, с помощью примитивов синхронизации, таких как критические разделы, семафоры или мьютексы. Кроме того, так как объект не управляет временем существования потоков, которые обращаются к нему, в объекте (в локальном хранилище потока) не может храниться состояние, зависящее от потока.

Примечание Многопоточное подразделение предназначено для использования потоками без графического пользовательского интерфейса. Потоки в многопоточных квартирах не должны выполнять действия пользовательского интерфейса. Это связано с тем, что потокам пользовательского интерфейса требуется насос сообщений, а COM не перекачивает сообщения для потоков в многопотоковом объекте.
 

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Верхняя часть objbase.h

См. также раздел

CoInitializeEx

IInitializeSpy::P ostInitialize

IInitializeSpy::P reInitialize

Процессы, потоки и квартиры