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


Класс CComCriticalSection

Этот класс предоставляет методы для получения и освобождения владения критически важным объектом раздела.

Синтаксис

class CComCriticalSection

Участники

Открытые конструкторы

Имя Описание
CComCriticalSection::CComCriticalSection Конструктор.

Открытые методы

Имя Описание
CComCriticalSection::Init Создает и инициализирует объект критического раздела.
CComCriticalSection::Lock Получает владение объектом критического раздела.
CComCriticalSection::Term Освобождает системные ресурсы, используемые объектом критического раздела.
CComCriticalSection::Unlock Освобождает владение объектом критического раздела.

Открытые члены данных

Имя Описание
CComCriticalSection::m_sec Объект CRITICAL_SECTION.

Замечания

CComCriticalSection аналогичен классу CComAutoCriticalSection, за исключением того, что необходимо явно инициализировать и освободить критически важный раздел.

Как правило, используется CComCriticalSection имя typedef CriticalSection. Это имя ссылается на CComCriticalSection, если используется CComMultiThreadModel.

См . класс CComCritSecLock для более безопасного использования этого класса, чем вызов Lock и Unlock непосредственно.

Требования

Заголовок: atlcore.h

CComCriticalSection::CComCriticalSection

Конструктор.

CComCriticalSection() throw();

Замечания

Задает элемент данных m_sec значение NULL.

CComCriticalSection::Init

Вызывает функцию Win32 InitializeCriticalSection, которая инициализирует объект критического раздела, содержащийся в элементе данных m_sec .

HRESULT Init() throw();

Возвращаемое значение

Возвращает S_OK при успешном выполнении E_OUTOFMEMORY или E_FAIL при сбое.

CComCriticalSection::Lock

Вызывает функцию Win32 EnterCriticalSection, которая ожидает, пока поток не сможет взять на себя владение критически важным объектом раздела, содержащимся в элементе данных m_sec .

HRESULT Lock() throw();

Возвращаемое значение

Возвращает S_OK при успешном выполнении E_OUTOFMEMORY или E_FAIL при сбое.

Замечания

Объект критического раздела должен быть инициализирован с помощью вызова метода Init . После завершения выполнения защищенного кода поток должен вызвать разблокировку , чтобы освободить владение критически важным разделом.

CComCriticalSection::m_sec

Содержит критически важный объект раздела, используемый всеми CComCriticalSection методами.

CRITICAL_SECTION m_sec;

CComCriticalSection::Term

Вызывает функцию Win32 DeleteCriticalSection, которая освобождает все ресурсы, используемые объектом критического раздела, содержащимся в элементе данных m_sec .

HRESULT Term() throw();

Возвращаемое значение

Возвращает S_OK.

Замечания

После Term вызова критически важный раздел больше не может использоваться для синхронизации.

CComCriticalSection::Unlock

Вызывает функцию Win32 LeaveCriticalSection, которая освобождает владение критически важным объектом раздела, содержащимся в элементе данных m_sec .

HRESULT Unlock() throw();

Возвращаемое значение

Возвращает S_OK.

Замечания

Чтобы сначала получить владение, поток должен вызвать метод Lock . Каждому вызову требуется соответствующий вызов Lock для Unlock освобождения владения критически важным разделом.

См. также

Класс CComFakeCriticalSection
Общие сведения о классе
Класс CComCritSecLock