Поделиться через


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

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

Синтаксис

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

Константы

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

Комментарии

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

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

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

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

Требования

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

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

CoInitializeEx

IInitializeSpy::P ostInitialize

IInitializeSpy::P reInitialize

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