#ifndef __AutoCriticalSection_h__
#define __AutoCriticalSection_h__
/////////////////////////////////////////////////////////////////////////////
// AutoCriticalSection.h | Declaration of the TCAutoCriticalSection class.
//
/////////////////////////////////////////////////////////////////////////////
// TCAutoCriticalSection provides methods for obtaining and releasing
// ownership of a Win32 critical section object. TCAutoCriticalSection
// automatically initializes critical section objects in the constructor, and
// automatically deletes the critical section in the destructor.
class TCAutoCriticalSection
{
// Construction / Destruction
public:
TCAutoCriticalSection();
~TCAutoCriticalSection();
// Operations
public:
void Lock();
void Unlock();
// Data Members
protected:
CRITICAL_SECTION m_sec; // A Win32 CRITICAL_SECTION object.
};
/////////////////////////////////////////////////////////////////////////////
// Group=Construction / Destruction
/////////////////////////////////////////////////////////////////////////////
// Description: Constructor.
//
// The constructor. Calls the Win32 function InitializeCriticalSection,
// which initializes the critical section object contained in the m_sec data
// member.
//
// See Also: TCAutoCriticalSection::Lock, TCAutoCriticalSection::destructor
inline TCAutoCriticalSection::TCAutoCriticalSection()
{
InitializeCriticalSection(&m_sec);
}
/////////////////////////////////////////////////////////////////////////////
// Description: Destructor
//
// The destructor. calls DeleteCriticalSection, which releases all system
// resources used by the critical section object.
//
// See Also: TCAutoCriticalSection::Unlock,
// TCAutoCriticalSection::constructor
inline TCAutoCriticalSection::~TCAutoCriticalSection()
{
DeleteCriticalSection(&m_sec);
}
/////////////////////////////////////////////////////////////////////////////
// Group=Operations
/////////////////////////////////////////////////////////////////////////////
// Obtains ownership of the critical section object.
//
// See Also: TCAutoCriticalSection::Unlock, TCAutoCriticalSection::destructor
inline void TCAutoCriticalSection::Lock()
{
EnterCriticalSection(&m_sec);
}
/////////////////////////////////////////////////////////////////////////////
// Releases ownership of the critical section object.
//
// See Also: TCAutoCriticalSection::Lock, TCAutoCriticalSection::constructor
inline void TCAutoCriticalSection::Unlock()
{
LeaveCriticalSection(&m_sec);
}
/////////////////////////////////////////////////////////////////////////////
#endif // !__AutoCriticalSection_h__