remove \r
[extl.git] / extl / win / synch / event.h
blob9f93c3f0132487d5969f1b3403efec242168dcc8
1 /* ///////////////////////////////////////////////////////////////////////
2 * File: event.h
4 * Created: 08.03.20
5 * Updated: 08.05.05
7 * Brief: event object class
9 * [<Home>]
10 * Copyright (c) 2008-2020, Waruqi All rights reserved.
11 * //////////////////////////////////////////////////////////////////// */
12 #ifndef EXTL_WIN_SYNCH_EVENT_H
13 #define EXTL_WIN_SYNCH_EVENT_H
15 /*!\file event.h
16 * \brief event object class
18 #ifndef __cplusplus
19 # error event.h need be supported by c++.
20 #endif
22 /* ///////////////////////////////////////////////////////////////////////
23 * Includes
25 #include "../win.h"
26 #include "../../utility/uncopyable.h"
28 #if defined(EXTL_EXCEPTION_SUPPORT) && \
29 defined(EXTL_EXCEPTION_ENABLE)
30 # include "../error/win_synch_error.h"
31 #endif
33 /* ///////////////////////////////////////////////////////////////////////
34 * ::extl::platform::win namespace
36 EXTL_WIN_BEGIN_WHOLE_NAMESPACE
38 /*!\brief event class
39 * \ingroup extl_group_synch
41 class event : private uncopyable<event>
43 /// \name Types
44 /// @{
45 public:
46 typedef event class_type;
47 typedef HANDLE handle_type;
48 typedef HANDLE synch_object_type;
49 /// @}
51 private:
52 /// The event object
53 synch_object_type m_event_obj;
55 /// \name Constructors
56 /// @{
57 public:
58 event()
59 : m_event_obj(NULL)
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);
77 m_event_obj = NULL;
80 /// @}
81 public:
82 /// Sets the event
83 e_bool_t set_event()
85 EXTL_ASSERT(NULL != m_event_obj);
87 if(!::SetEvent(m_event_obj))
89 EXTL_THROW_E(win_synch_error("SetEvent operation failed"));
90 return e_false_v;
92 else return e_true_v;
95 /// Resets the event
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"));
103 return e_false_v;
105 else return e_true_v;
107 /// Pulses the event
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"));
115 return e_false_v;
117 else return e_true_v;
119 public:
120 /// Returns object handle
121 operator handle_type() const
123 return m_event_obj;
125 /// Returns object handle
126 handle_type get_handle() const
128 return m_event_obj;
131 /// Create event
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);
138 /// Create event
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);
146 private:
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"));
151 return event_obj;
155 /* ///////////////////////////////////////////////////////////////////////
156 * ::extl::platform::win namespace
158 EXTL_WIN_END_WHOLE_NAMESPACE
160 /* //////////////////////////////////////////////////////////////////// */
161 #endif /* EXTL_WIN_SYNCH_EVENT_H */
162 /* //////////////////////////////////////////////////////////////////// */