AutoCriticalSection.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #ifndef __ZAutoCriticalSection_h__
  2. #define __ZAutoCriticalSection_h__
  3. /////////////////////////////////////////////////////////////////////////////
  4. // ZAutoCriticalSection.h | Declaration of the ZAutoCriticalSection class.
  5. //
  6. /////////////////////////////////////////////////////////////////////////////
  7. // ZAutoCriticalSection provides methods for obtaining and releasing
  8. // ownership of a Win32 critical section object. ZAutoCriticalSection
  9. // automatically initializes critical section objects in the constructor, and
  10. // automatically deletes the critical section in the destructor.
  11. class ZAutoCriticalSection
  12. {
  13. // Construction / Destruction
  14. public:
  15. ZAutoCriticalSection();
  16. ~ZAutoCriticalSection();
  17. // Operations
  18. public:
  19. void Lock();
  20. void Unlock();
  21. // Data Members
  22. protected:
  23. CRITICAL_SECTION m_sec; // A Win32 CRITICAL_SECTION object.
  24. };
  25. /////////////////////////////////////////////////////////////////////////////
  26. // Group=Construction / Destruction
  27. /////////////////////////////////////////////////////////////////////////////
  28. // Description: Constructor.
  29. //
  30. // The constructor. Calls the Win32 function InitializeCriticalSection,
  31. // which initializes the critical section object contained in the m_sec data
  32. // member.
  33. //
  34. // See Also: ZAutoCriticalSection::Lock, ZAutoCriticalSection::destructor
  35. inline ZAutoCriticalSection::ZAutoCriticalSection()
  36. {
  37. InitializeCriticalSection(&m_sec);
  38. }
  39. /////////////////////////////////////////////////////////////////////////////
  40. // Description: Destructor
  41. //
  42. // The destructor. calls DeleteCriticalSection, which releases all system
  43. // resources used by the critical section object.
  44. //
  45. // See Also: ZAutoCriticalSection::Unlock,
  46. // ZAutoCriticalSection::constructor
  47. inline ZAutoCriticalSection::~ZAutoCriticalSection()
  48. {
  49. DeleteCriticalSection(&m_sec);
  50. }
  51. /////////////////////////////////////////////////////////////////////////////
  52. // Group=Operations
  53. /////////////////////////////////////////////////////////////////////////////
  54. // Obtains ownership of the critical section object.
  55. //
  56. // See Also: ZAutoCriticalSection::Unlock, ZAutoCriticalSection::destructor
  57. inline void ZAutoCriticalSection::Lock()
  58. {
  59. EnterCriticalSection(&m_sec);
  60. }
  61. /////////////////////////////////////////////////////////////////////////////
  62. // Releases ownership of the critical section object.
  63. //
  64. // See Also: ZAutoCriticalSection::Lock, ZAutoCriticalSection::constructor
  65. inline void ZAutoCriticalSection::Unlock()
  66. {
  67. LeaveCriticalSection(&m_sec);
  68. }
  69. /////////////////////////////////////////////////////////////////////////////
  70. #endif // !__ZAutoCriticalSection_h__