ThrdBase.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:2k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //***************************************************************************
  2. //
  3. // Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
  4. //
  5. //  ThrdBase.h
  6. //
  7. //  Purpose: Definition of ThreadBase class
  8. //
  9. //***************************************************************************
  10. #if _MSC_VER > 1000
  11. #pragma once
  12. #endif
  13. #ifndef __THREADBASE_H__
  14. #define __THREADBASE_H__
  15. class POLARITY CThreadBase
  16. {
  17. public:
  18. enum THREAD_SAFETY_MECHANISM
  19. {
  20. etsmFirst = 0,
  21. etsmSerialized = 0,
  22. etsmPriorityRead,
  23. etsmPriorityWrite,
  24. etsmLast
  25. };
  26. // Construction/Destruction
  27. CThreadBase( THREAD_SAFETY_MECHANISM etsm = etsmSerialized );
  28. virtual ~CThreadBase();
  29. // Thread Safe Ref/Counting functions
  30. LONG AddRef( void );
  31. LONG Release( void );
  32. // Provide Readable Read/Write accessors should
  33. // we not want to serialize at a later date.  Note
  34. // that timeouts have no meaning unless we're
  35. // doing a non-serialized implementation.
  36. BOOL BeginRead( DWORD dwTimeOut = INFINITE );
  37. void EndRead( void );
  38. BOOL BeginWrite( DWORD dwTimeOut = INFINITE );
  39. void EndWrite( void );
  40. protected:
  41. virtual void OnFinalRelease( void );
  42. // Thread Safety functions
  43. private:
  44. CRITICAL_SECTION m_cs;
  45. LONG m_lRefCount;
  46. THREAD_SAFETY_MECHANISM m_etsm;
  47. // Private thread safety functions.  We can maybe promote
  48. // these to protected if we see a need to later, however
  49. // for right now, everyone should specify if they mean
  50. // to read or write when they wish to access data that
  51. // may change.
  52. void Lock( void );
  53. void Unlock( void );
  54. };
  55. inline BOOL CThreadBase::BeginRead( DWORD dwTimeout /*=INFINITE*/ )
  56. {
  57. EnterCriticalSection( &m_cs );
  58. return TRUE;
  59. }
  60. inline void CThreadBase::EndRead( void )
  61. {
  62. LeaveCriticalSection( &m_cs );
  63. }
  64. inline BOOL CThreadBase::BeginWrite( DWORD dwTimeout /*=INFINITE*/ )
  65. {
  66. EnterCriticalSection( &m_cs );
  67. return TRUE;
  68. }
  69. inline void CThreadBase::EndWrite( void )
  70. {
  71. LeaveCriticalSection( &m_cs );
  72. }
  73. inline void CThreadBase::Lock( void )
  74. {
  75. EnterCriticalSection( &m_cs );
  76. }
  77. inline void CThreadBase::Unlock( void )
  78. {
  79. LeaveCriticalSection( &m_cs );
  80. }
  81. #endif