#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__