Перечисление 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 во время обработки, которые не должны прерываться вызовами других методов или вызовами других объектов в том же объекте или потоке.
Многопотоковые (также называемые свободными потоками) позволяют вызывать методы объектов, созданных этим потоком, для выполнения в любом потоке. Сериализация вызовов не выполняется, т. е. многие вызовы могут выполняться к одному и тому же методу, к одному и тому же объекту или одновременно. Параллелизм многопоточных объектов обеспечивает максимальную производительность и использует лучшее преимущество многопроцессорного оборудования для межпотоковых, межпроцессорных и межмашинных вызовов, так как вызовы объектов не сериализуются никаким образом. Это означает, однако, что код для объектов должен применять собственную модель параллелизма, как правило, с помощью примитивов синхронизации, таких как критические разделы, семафоры или мьютексы. Кроме того, поскольку объект не управляет временем существования потоков, которые обращаются к нему, в объекте (в локальном хранилище потока) не может храниться состояние конкретного потока.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Верхняя часть | objbase.h |
См. также раздел
IInitializeSpy::P ostInitialize