1 /* ///////////////////////////////////////////////////////////////////////
7 * Brief: event_lock class
10 * Copyright (c) 2008-2020, Waruqi All rights reserved.
11 * //////////////////////////////////////////////////////////////////// */
12 #ifndef EXTL_WIN_SYNCH_EVENT_LOCK_H
13 #define EXTL_WIN_SYNCH_EVENT_LOCK_H
16 * \brief event_lock class
19 # error event_lock.h need be supported by c++.
22 /* ///////////////////////////////////////////////////////////////////////
26 #include "../../synch/lock_base.h"
29 /* ///////////////////////////////////////////////////////////////////////
30 * ::extl::platform::win namespace
32 EXTL_WIN_BEGIN_WHOLE_NAMESPACE
34 /*!\brief event_lock class
35 * \ingroup extl_group_synch
38 : public lock_base
< event_lock
>
41 typedef lock_base
< event_lock
> base_type
;
42 typedef event_lock class_type
;
43 typedef base_type::size_type size_type
;
50 : m_event_obj(e_false_v
, e_true_v
), /* reset event automaticly */
53 EXTL_ASSERT(is_valid());
58 if(base_type::is_locked())
67 EXTL_ASSERT(is_valid());
69 /* Waits the event object */
70 ::WaitForSingleObject(m_event_obj
, INFINITE
);
75 EXTL_ASSERT(is_valid());
77 /* Try waiting the event object for 100 milliseconds */
78 return (WAIT_TIMEOUT
!= ::WaitForSingleObject(m_event_obj
, 100));
82 EXTL_ASSERT(is_valid());
83 /* Sets the event object */
84 m_event_obj
.set_event();
89 return ((m_event_obj
!= NULL
) && (m_event_obj
!= INVALID_HANDLE_VALUE
));
93 /* ///////////////////////////////////////////////////////////////////////
96 #ifdef EXTL_SYNCH_LOCK_TEST_ENABLE
97 # include "unit_test/event_lock_test.h"
99 /* ///////////////////////////////////////////////////////////////////////
100 * ::extl::platform::win namespace
102 EXTL_WIN_END_WHOLE_NAMESPACE
104 /* //////////////////////////////////////////////////////////////////// */
105 #endif /* EXTL_WIN_SYNCH_EVENT_LOCK_H */
106 /* //////////////////////////////////////////////////////////////////// */