#ifndef __ZAutoCriticalSection_h__
#define __ZAutoCriticalSection_h__
/////////////////////////////////////////////////////////////////////////////
// ZAutoCriticalSection.h | Declaration of the ZAutoCriticalSection class.
//
/////////////////////////////////////////////////////////////////////////////
// ZAutoCriticalSection provides methods for obtaining and releasing
// ownership of a Win32 critical section object. ZAutoCriticalSection
// automatically initializes critical section objects in the constructor, and
// automatically deletes the critical section in the destructor.
class ZAutoCriticalSection
{
// Construction / Destruction
public:
ZAutoCriticalSection();
~ZAutoCriticalSection();
// 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: ZAutoCriticalSection::Lock, ZAutoCriticalSection::destructor
inline ZAutoCriticalSection::ZAutoCriticalSection()
{
InitializeCriticalSection(&m_sec);
}
/////////////////////////////////////////////////////////////////////////////
// Description: Destructor
//
// The destructor. calls DeleteCriticalSection, which releases all system
// resources used by the critical section object.
//
// See Also: ZAutoCriticalSection::Unlock,
// ZAutoCriticalSection::constructor
inline ZAutoCriticalSection::~ZAutoCriticalSection()
{
DeleteCriticalSection(&m_sec);
}
/////////////////////////////////////////////////////////////////////////////
// Group=Operations
/////////////////////////////////////////////////////////////////////////////
// Obtains ownership of the critical section object.
//
// See Also: ZAutoCriticalSection::Unlock, ZAutoCriticalSection::destructor
inline void ZAutoCriticalSection::Lock()
{
EnterCriticalSection(&m_sec);
}
/////////////////////////////////////////////////////////////////////////////
// Releases ownership of the critical section object.
//
// See Also: ZAutoCriticalSection::Lock, ZAutoCriticalSection::constructor
inline void ZAutoCriticalSection::Unlock()
{
LeaveCriticalSection(&m_sec);
}
/////////////////////////////////////////////////////////////////////////////
#endif // !__ZAutoCriticalSection_h__