www.pudn.com > acdx.rar > SysEvent.h
#if !defined(SysEvent_H) #define SysEvent_H #includeusing namespace std; //////////////////////////////////////////////////////////////////////// // SysEvent //##ModelId=424BB641022A class SysEvent { //##ModelId=424BB641022C string m_name; // name of event //##ModelId=424BB641023C HANDLE m_hEvent; // handle to user event //##ModelId=424BB6410249 bool m_attached; // shows if just attached to event public: //##ModelId=424BB641024A SysEvent () : m_name (), m_hEvent (NULL), m_attached(false) {} //##ModelId=424BB6410259 SysEvent ( SysEvent & event ) : m_name (), m_hEvent (NULL), m_attached(false) { *this = event; } //##ModelId=424BB641025B virtual ~SysEvent () { release(); } // create/release //##ModelId=424BB641025D bool create () { // release if needed release(); // init name m_name = ""; // create event m_attached = false; m_hEvent = ::CreateEvent( NULL, TRUE, FALSE, NULL ); if ( m_hEvent == NULL ) return false; else return true; } //##ModelId=424BB6410269 bool create ( LPTSTR name ) { if ( !name ) return false; // release if needed release(); // create named event m_attached = false; m_hEvent = ::CreateEvent( NULL, TRUE, FALSE, (LPCTSTR) name ); if ( m_hEvent == NULL ) return false; else return true; } //##ModelId=424BB641026B void release () { // if only attached just detach // else destroy event and name if ( m_attached ) detach(); else { if ( m_hEvent ) { ::CloseHandle(m_hEvent); m_hEvent = NULL; } if ( !m_name.empty() ) m_name.erase(); } } // attach/detach from event //##ModelId=424BB641026C bool attached () { return m_attached; } //##ModelId=424BB6410278 bool attach ( HANDLE hEvent ) { if ( !hEvent ) return false; // get handle show attached m_hEvent = hEvent; m_attached = true; return true; } //##ModelId=424BB641027A void detach () { // if not attached stop if ( !m_attached ) return; m_hEvent = NULL; if ( !m_name.empty() ) m_name.erase(); m_attached = false; } // set/reset event //##ModelId=424BB641027B void set () { ::SetEvent( m_hEvent ); } //##ModelId=424BB6410288 void reset () { ::ResetEvent( m_hEvent ); } // get event handle //##ModelId=424BB6410289 HANDLE getEvent () { return m_hEvent; } // ref operators //##ModelId=424BB641028A HANDLE operator & () { return m_hEvent; } //##ModelId=424BB641028B operator HANDLE () { return m_hEvent; } // sort operators //##ModelId=424BB6410298 bool operator < ( SysEvent & event ) { if ( m_hEvent < event.m_hEvent ) return true; else return false; } //##ModelId=424BB641029A bool operator == ( SysEvent & event ) { if ( m_hEvent == event.m_hEvent ) return true; else return false; } //##ModelId=424BB64102A7 bool operator = ( SysEvent & event ) { m_name = event.m_name; m_hEvent = event.m_hEvent; m_attached = event.m_attached; } }; #endif