1 /* ///////////////////////////////////////////////////////////////////////
7 * Brief: event object class
10 * Copyright (c) 2008-2020, Waruqi All rights reserved.
11 * //////////////////////////////////////////////////////////////////// */
12 #ifndef EXTL_WIN_SYNCH_EVENT_H
13 #define EXTL_WIN_SYNCH_EVENT_H
16 * \brief event object class
19 # error event.h need be supported by c++.
22 /* ///////////////////////////////////////////////////////////////////////
26 #include "../../utility/uncopyable.h"
28 #if defined(EXTL_EXCEPTION_SUPPORT) && \
29 defined(EXTL_EXCEPTION_ENABLE)
30 # include "../error/win_synch_error.h"
33 /* ///////////////////////////////////////////////////////////////////////
34 * ::extl::platform::win namespace
36 EXTL_WIN_BEGIN_WHOLE_NAMESPACE
39 * \ingroup extl_group_synch
41 class event
: private uncopyable
<event
>
46 typedef event class_type
;
47 typedef HANDLE handle_type
;
48 typedef HANDLE synch_object_type
;
53 synch_object_type m_event_obj
;
55 /// \name Constructors
62 explicit_k
event(e_bool_t bManualreset
, e_bool_t bInitialState
,
63 LPSECURITY_ATTRIBUTES psa
= NULL
)
64 : m_event_obj(create_event_(psa
, bManualreset
, bInitialState
, NULL
))
67 explicit_k
event(e_tchar_t
const* szName
, e_bool_t bManualreset
,
68 e_bool_t bInitialState
, LPSECURITY_ATTRIBUTES psa
= NULL
)
69 : m_event_obj(create_event_(psa
, bManualreset
, bInitialState
, szName
))
72 virtual ~event() EXTL_THROW_0()
74 if(NULL
!= m_event_obj
)
76 ::CloseHandle(m_event_obj
);
85 EXTL_ASSERT(NULL
!= m_event_obj
);
87 if(!::SetEvent(m_event_obj
))
89 EXTL_THROW_E(win_synch_error("SetEvent operation failed"));
96 e_bool_t
reset_event()
98 EXTL_ASSERT(NULL
!= m_event_obj
);
100 if(!::ResetEvent(m_event_obj
))
102 EXTL_THROW_E(win_synch_error("reset_event operation failed"));
105 else return e_true_v
;
108 e_bool_t
pulse_event()
110 EXTL_ASSERT(NULL
!= m_event_obj
);
112 if(!::PulseEvent(m_event_obj
))
114 EXTL_THROW_E(win_synch_error("PulseEvent operation failed"));
117 else return e_true_v
;
120 /// Returns object handle
121 operator handle_type() const
125 /// Returns object handle
126 handle_type
get_handle() const
132 void create(e_bool_t bManualreset
, e_bool_t bInitialState
,
133 LPSECURITY_ATTRIBUTES psa
= NULL
)
135 m_event_obj
= create_event_(psa
, bManualreset
, bInitialState
, NULL
);
139 void create(e_tchar_t
const* szName
, e_bool_t bManualreset
,
140 e_bool_t bInitialState
, LPSECURITY_ATTRIBUTES psa
= NULL
)
142 m_event_obj
= create_event_(psa
, bManualreset
, bInitialState
, szName
);
147 synch_object_type
create_event_(LPSECURITY_ATTRIBUTES psa
, e_bool_t bManualreset
, e_bool_t bInitialState
, e_tchar_t
const* pszName
)
149 synch_object_type event_obj
= ::CreateEvent(psa
, bManualreset
, bInitialState
, pszName
);
150 EXTL_ASSERT_THROW(event_obj
!= NULL
, win_synch_error("Failed to create kernel event object"));
155 /* ///////////////////////////////////////////////////////////////////////
156 * ::extl::platform::win namespace
158 EXTL_WIN_END_WHOLE_NAMESPACE
160 /* //////////////////////////////////////////////////////////////////// */
161 #endif /* EXTL_WIN_SYNCH_EVENT_H */
162 /* //////////////////////////////////////////////////////////////////// */