⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysevent.h

📁 一个c++实现的acd的例子。 ----ACDCommandListener.cpp ---ACDCommandListenerThread.cpp ---ACDConfig.cpp ---a
💻 H
字号:
#if !defined(SysEvent_H)
#define SysEvent_H






#include <string>
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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -