Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
3.0 KiB

  1. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Microsoft WMI OLE DB Provider
  4. // (C) Copyright 1999 Microsoft Corporation. All Rights Reserved.
  5. //
  6. // Generic critical section handling classes
  7. //
  8. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. #ifndef __CRITSEC_H_
  10. #define __CRITSEC_H_
  11. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  12. //
  13. // The constructor/destructor automatically initializes/deletes the CRITIICAL_SECTION correctly, to ensure
  14. // that each call is correctly paired, IF the fAutoInit is set to TRUE, otherwise, you have to manually deal
  15. // with this - this is implemented for the static global CS that is required.
  16. //
  17. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  18. class CCriticalSection
  19. {
  20. public:
  21. inline CCriticalSection(BOOL fAutoInit); // CTOR.
  22. inline ~CCriticalSection(); // DTOR.
  23. inline void Enter(); // Enter the critical section
  24. inline void Leave(); // Leave the critical section
  25. // inline DWORD OwningThreadId(); // Returns the "owning" thread id
  26. inline void Init(void);
  27. inline void Delete(void);
  28. private:
  29. BOOL m_fAutoInit;
  30. CRITICAL_SECTION m_criticalsection; // standby critical section
  31. };
  32. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  33. inline CCriticalSection::CCriticalSection(BOOL fAutoInit)
  34. {
  35. m_fAutoInit = fAutoInit;
  36. if( m_fAutoInit ){
  37. Init();
  38. }
  39. }
  40. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  41. inline void CCriticalSection::Init(void)
  42. {
  43. InitializeCriticalSection(&m_criticalsection);
  44. }
  45. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  46. inline void CCriticalSection::Delete(void)
  47. {
  48. DeleteCriticalSection(&m_criticalsection);
  49. }
  50. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  51. inline CCriticalSection::~CCriticalSection()
  52. {
  53. if( m_fAutoInit ){
  54. Delete();
  55. }
  56. }
  57. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  58. inline void CCriticalSection::Enter(void)
  59. {
  60. EnterCriticalSection(&m_criticalsection);
  61. }
  62. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  63. inline void CCriticalSection::Leave(void)
  64. {
  65. LeaveCriticalSection(&m_criticalsection);
  66. }
  67. /*
  68. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  69. inline DWORD CCriticalSection::OwningThreadId(void)
  70. {
  71. return DWORD(m_criticalsection.OwningThread);
  72. }
  73. */
  74. #endif // __CRITSEC_H_