www.pudn.com > acdx.rar > SysEvent.h


#if !defined(SysEvent_H) 
#define SysEvent_H 
 
 
 
 
 
 
#include  
using 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