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

模拟服务器

开发平台:

C/C++

  1. #include "Event.h"
  2. #include "Win32Exception.h"
  3. /*
  4.  * namespace OnlineGameLib::Win32
  5.  */
  6. namespace OnlineGameLib {
  7. namespace Win32 {
  8. /*
  9.  * Static helper methods
  10.  */
  11. static HANDLE Create(
  12. LPSECURITY_ATTRIBUTES lpEventAttributes, 
  13. bool bManualReset, 
  14. bool bInitialState, 
  15. LPCTSTR lpName);
  16. static HANDLE Create(
  17. LPSECURITY_ATTRIBUTES lpEventAttributes, 
  18. bool bManualReset, 
  19. bool bInitialState, 
  20. LPCTSTR lpName)
  21. {
  22. HANDLE hEvent = ::CreateEvent( lpEventAttributes, bManualReset, bInitialState, lpName );
  23. if ( NULL == hEvent )
  24. {
  25. throw CWin32Exception( _T("CEvent::Create()"), ::GetLastError() );
  26. }
  27. return hEvent;
  28. }
  29. CEvent::CEvent(
  30.    LPSECURITY_ATTRIBUTES lpEventAttributes, 
  31.    bool bManualReset, 
  32.    bool bInitialState)
  33.    : m_hEvent( Create( lpEventAttributes, bManualReset, bInitialState, 0 ) )
  34. {
  35. }
  36. CEvent::CEvent(
  37.    LPSECURITY_ATTRIBUTES lpEventAttributes, 
  38.    bool bManualReset, 
  39.    bool bInitialState, 
  40.    const _tstring &name)
  41.    : m_hEvent( Create( lpEventAttributes, bManualReset, bInitialState, name.c_str() ) )
  42. {
  43. }
  44. CEvent::~CEvent()
  45. {
  46. ::CloseHandle( m_hEvent );
  47. }
  48. HANDLE CEvent::GetEvent() const
  49. {
  50. return m_hEvent;
  51. }
  52. void CEvent::Wait() const
  53. {
  54. if ( !Wait( INFINITE ) )
  55. {
  56. throw CException( _T("CEvent::Wait()"), _T("Unexpected timeout on infinite wait") );
  57. }
  58. }
  59. bool CEvent::Wait( DWORD timeoutMillis ) const
  60. {
  61. bool ok;
  62. DWORD result = ::WaitForSingleObject( m_hEvent, timeoutMillis );
  63. if ( result == WAIT_TIMEOUT )
  64. {
  65. ok = false;
  66. }
  67. else if ( result == WAIT_OBJECT_0 )
  68. {
  69. ok = true;
  70. }
  71. else
  72. {
  73. throw CWin32Exception( _T("CEvent::Wait() - WaitForSingleObject"), ::GetLastError() );
  74. }
  75.     
  76. return ok;
  77. }
  78. void CEvent::Reset()
  79. {
  80. if ( !::ResetEvent( m_hEvent ) )
  81. {
  82. throw CWin32Exception( _T("CEvent::Reset()"), ::GetLastError() );
  83. }
  84. }
  85. void CEvent::Set()
  86. {
  87. if ( !::SetEvent( m_hEvent ) )
  88. {
  89. throw CWin32Exception( _T("CEvent::Set()"), ::GetLastError() );
  90. }
  91. }
  92. void CEvent::Pulse()
  93. {
  94. if ( !::PulseEvent( m_hEvent ) )
  95. {
  96. throw CWin32Exception( _T("CEvent::Pulse()"), ::GetLastError() );
  97. }
  98. }
  99. } // End of namespace OnlineGameLib
  100. } // End of namespace Win32