lean cpp library
A lean C++ library providing efficient utility classes for high-performance C++ applications.
|
00001 /*****************************************************/ 00002 /* lean Concurrent (c) Tobias Zirr 2011 */ 00003 /*****************************************************/ 00004 00005 #ifndef LEAN_CONCURRENT_EVENT 00006 #define LEAN_CONCURRENT_EVENT 00007 00008 #include "../lean.h" 00009 #include "../tags/noncopyable.h" 00010 #include <windows.h> 00011 00012 namespace lean 00013 { 00014 namespace concurrent 00015 { 00016 00018 class event : public noncopyable 00019 { 00020 private: 00021 HANDLE m_event; 00022 00023 public: 00025 event(bool signaled = false) 00026 : m_event( ::CreateEventW(NULL, true, signaled, NULL) ) 00027 { 00028 LEAN_ASSERT(m_event != NULL); 00029 } 00031 ~event() 00032 { 00033 ::CloseHandle(m_event); 00034 } 00035 00037 LEAN_INLINE void wait() 00038 { 00039 DWORD result = ::WaitForSingleObject(m_event, INFINITE); 00040 LEAN_ASSERT(result == WAIT_OBJECT_0); 00041 } 00042 00044 LEAN_INLINE void set() 00045 { 00046 BOOL result = ::SetEvent(m_event); 00047 LEAN_ASSERT(result != FALSE); 00048 } 00050 LEAN_INLINE void reset() 00051 { 00052 BOOL result = ::ResetEvent(m_event); 00053 LEAN_ASSERT(result != FALSE); 00054 } 00055 00057 LEAN_INLINE void signaled(bool signaled) 00058 { 00059 if (signaled) 00060 set(); 00061 else 00062 reset(); 00063 } 00064 00066 LEAN_INLINE HANDLE native_handle() const 00067 { 00068 return m_event; 00069 } 00070 }; 00071 00072 } // namespace 00073 00074 using concurrent::event; 00075 00076 } // namespace 00077 00078 #endif