Listing 1: critsect.hpp C++ wrapper for critical section
#ifndef CRITICALSECTION_HPP #define CRITICALSECTION_HPP #define STRICT #define WIN32_LEAN_AND_MEAN #if !defined(_INC_WINDOWS) && !defined(__WINDOWS_H) # include <windows.h> #endif class CriticalSection { public: class Lock; // Claim CriticalSection inline CriticalSection(Lock &toLock); // Automatically relinquish CriticalSection inline ~CriticalSection(); private: // Lock to Claim or Relinquish Lock &lock; }; // CriticalSection class CriticalSection::Lock : private CRITICAL_SECTION { friend CriticalSection; public: inline Lock(); inline ~Lock(); }; // CriticalSection::Lock inline CriticalSection::Lock::Lock() { InitializeCriticalSection(this); } // CriticalSection::Lock::Lock() inline CriticalSection::Lock::~Lock() { DeleteCriticalSection(this); } // CriticalSection::Lock::~Lock inline CriticalSection::CriticalSection(Lock &toLock) : lock(toLock) { EnterCriticalSection(&lock); } // CriticalSection::CriticalSection(Lock) inline CriticalSection::~CriticalSection() { LeaveCriticalSection(&lock); } // CriticalSection::~CriticalSection #endif // CRITICALSECTION_HPP //End of File