typedef CComAutoCriticalSection AutoCriticalSection;
Зауваження
При використанні CComMultiThreadModel, ім'я typedef AutoCriticalSection посилання класу CComAutoCriticalSection, яка надає методи для отримання і звільнення власності критичної секції об'єкта.
CComSingleThreadModel і CComMultiThreadModelNoCS також містять визначення для AutoCriticalSection. У нижченаведеній таблиці показано зв'язок між threading модель класу і класу критичної секції посилання на AutoCriticalSection:
Клас, визначених у | Клас посилання |
CComMultiThreadModel | CComCriticalSection |
CComSingleThreadModel | CComFakeCriticalSection |
CComMultiThreadModelNoCS | CComFakeCriticalSection |
На додаток до AutoCriticalSectionможна використовувати ім'я typedef CriticalSection. Ви повинні не вказати AutoCriticalSection в глобальні об'єкти або членів статичного класу, щоб усунути CRT код запуску.
Приклад
Наступний код взято з CComObjectRootEx.
templatelt; клас ThreadModel >
клас CComObjectRootEx: Громадська CComObjectRootBase
{
готелю:
typedef ThreadModel _ThreadModel;
typedef _ThreadModel::AutoCriticalSection _CritSec;
ULONG (InternalAddRef)
{
...
повернення _ThreadModel::Increment(&m_dwRef);
}
...
недійсними блокування () {m_critsec.Блокування (); }
...
приватні:
_CritSec m_critsec;
}
У наведених нижче таблицях Показати результати InternalAddRef і Блокування методи, залежно від параметра шаблону ThreadModel та потокова модель, додатка:
ThreadModel = CComObjectThreadModel
Одного або квартири | Безкоштовні | |
InternalAddRef | Приростом не є безпечним для потоку. | Приростом є безпечним для потоку. |
Блокування | Не робить нічого; Існує немає критичної секції блокування. | Критична секція заблоковано. |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
Одного або квартири | Безкоштовні | |
InternalAddRef | Приростом не є безпечним для потоку. | Приростом є безпечним для потоку. |
Блокування | Не робить нічого; Існує немає критичної секції блокування. | Не робить нічого; Існує немає критичної секції блокування. |
Огляд CComMultiThreadModel | Члени класу
Дивіться такожnbsp;CComObjectThreadModel, CComGlobalsThreadModel, CComMultiThreadModel::ThreadModel&NoCS