CComMultiThreadModel::AutoCriticalSection
При использовании CComMultiThreadModel, ссылки AutoCriticalSection имени typedef классифицируют CComAutoCriticalSection, который предоставляет методы для получения объекта и освобождение владение критической секции.
Синтаксис
typedef CComAutoCriticalSection AutoCriticalSection;
Заметки
CComSingleThreadModel и CComMultiThreadModelNoCS также содержит определения AutoCriticalSection.Следующая таблица показывает связь между классом потоковой модели и классом критической секции снабженными на AutoCriticalSection:
Класс, определенный внутри |
Упоминаемый класс |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
В дополнение к AutoCriticalSection, можно использовать имя CriticalSectiontypedef.Не следует определять AutoCriticalSection в глобальных объектов или статических членах класса, если необходимо исключить код запуска CRT.
Следующий код после CComObjectRootEx моделируется и демонстрируется AutoCriticalSection используемой в threading среде.
template< class ThreadModel >
class CMyAutoCritClass
{
public:
typedef ThreadModel _ThreadModel;
typedef typename _ThreadModel::AutoCriticalSection _CritSec;
CMyAutoCritClass() : m_dwRef(0) {}
ULONG InternalAddRef()
{
return _ThreadModel::Increment(&m_dwRef);
}
ULONG InternalRelease()
{
return _ThreadModel::Decrement(&m_dwRef);
}
void Lock() { m_critsec.Lock( ); }
void Unlock() { m_critsec.Unlock(); }
private:
_CritSec m_critsec;
LONG m_dwRef;
};
В следующей таблице показаны результаты методов InternalAddRef и Lock, в зависимости от параметров шаблона ThreadModel и потоковой модели, используемых приложением.
ThreadModel = CComObjectThreadModel
Метод |
Укажите или потоковая модель Подразделение |
Освободите работа с потоками |
---|---|---|
InternalAddRef |
Приращение не является потокобезопасным. |
Увеличение потокобезопасным. |
Lock |
Не выполняет никаких действий. нет критической секции для блокирования. |
Критическая секция блокирована. |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
Метод |
Укажите или потоковая модель Подразделение |
Освободите работа с потоками |
---|---|---|
InternalAddRef |
Приращение не является потокобезопасным. |
Увеличение потокобезопасным. |
Lock |
Не выполняет никаких действий. нет критической секции для блокирования. |
Не выполняет никаких действий. нет критической секции для блокирования. |
Требования
Header: atlbase.h
См. также
CComMultiThreadModel Class
CComObjectThreadModel
CComGlobalsThreadModel
CComMultiThreadModel::ThreadModelNoCS