CComCriticalSection Class

This class provides methods for obtaining and releasing ownership of a critical section object.

Syntax

class CComCriticalSection

Members

Public Constructors

Name Description
CComCriticalSection::CComCriticalSection The constructor.

Public Methods

Name Description
CComCriticalSection::Init Creates and initializes a critical section object.
CComCriticalSection::Lock Obtains ownership of the critical section object.
CComCriticalSection::Term Releases system resources used by the critical section object.
CComCriticalSection::Unlock Releases ownership of the critical section object.

Public Data Members

Name Description
CComCriticalSection::m_sec A CRITICAL_SECTION object.

Remarks

CComCriticalSection is similar to class CComAutoCriticalSection, except that you must explicitly initialize and release the critical section.

Typically, you use CComCriticalSection through the typedef name CriticalSection. This name references CComCriticalSection when CComMultiThreadModel is being used.

See CComCritSecLock Class for a safer way to use this class than calling Lock and Unlock directly.

Requirements

Header: atlcore.h

CComCriticalSection::CComCriticalSection

The constructor.

CComCriticalSection() throw();

Remarks

Sets the m_sec data member to NULL.

CComCriticalSection::Init

Calls the Win32 function InitializeCriticalSection, which initializes the critical section object contained in the m_sec data member.

HRESULT Init() throw();

Return Value

Returns S_OK on success, E_OUTOFMEMORY or E_FAIL on failure.

CComCriticalSection::Lock

Calls the Win32 function EnterCriticalSection, which waits until the thread can take ownership of the critical section object contained in the m_sec data member.

HRESULT Lock() throw();

Return Value

Returns S_OK on success, E_OUTOFMEMORY or E_FAIL on failure.

Remarks

The critical section object must first be initialized with a call to the Init method. When the protected code has finished executing, the thread must call Unlock to release ownership of the critical section.

CComCriticalSection::m_sec

Contains a critical section object that is used by all CComCriticalSection methods.

CRITICAL_SECTION m_sec;

CComCriticalSection::Term

Calls the Win32 function DeleteCriticalSection, which releases all resources used by the critical section object contained in the m_sec data member.

HRESULT Term() throw();

Return Value

Returns S_OK.

Remarks

Once Term has been called, the critical section can no longer be used for synchronization.

CComCriticalSection::Unlock

Calls the Win32 function LeaveCriticalSection, which releases ownership of the critical section object contained in the m_sec data member.

HRESULT Unlock() throw();

Return Value

Returns S_OK.

Remarks

To first obtain ownership, the thread must call the Lock method. Each call to Lock requires a corresponding call to Unlock to release ownership of the critical section.

See also

CComFakeCriticalSection Class
Class Overview
CComCritSecLock Class