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

模拟服务器

开发平台:

C/C++

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