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

📄 sysevent.h

📁 Circular Buffer Example
💻 H
字号:
#if !defined(SysEvent_H)
#define SysEvent_H






#include <string>
using namespace std;



////////////////////////////////////////////////////////////////////////
// SysEvent 

class SysEvent
{
	string		m_name;				// name of event
	HANDLE		m_hEvent;			// handle to user event
	bool		m_attached;			// shows if just attached to event

public:
	SysEvent () :
		m_name (),
		m_hEvent (NULL),
		m_attached(false)
	{}

	SysEvent ( SysEvent & event ) :
		m_name (),
		m_hEvent (NULL),
		m_attached(false)
	{ *this = event; }

	virtual ~SysEvent ()
	{ release(); }

	// create/release
	bool create ()
	{
		// release if needed
		release();

		// create event
		m_attached = false;
		m_hEvent = ::CreateEvent( NULL, TRUE, FALSE, NULL );	

		if ( m_hEvent == NULL )
			return false;
		else
			return true;
	}

	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;
	}

	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
	bool attached ()
	{ return m_attached; }

	bool attach	( HANDLE hEvent )
	{
		if ( !hEvent )
			return false;

		// get handle show attached
		m_hEvent = hEvent;
		m_attached = true;
		
		return true;
	}

	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
	void set ()
	{
		::SetEvent( m_hEvent );
	}

	void reset ()
	{
		::ResetEvent( m_hEvent );
	}

	// get event handle
	HANDLE	getEvent ()
	{ return m_hEvent; }


	// ref operators
	HANDLE operator & ()		
	{ return m_hEvent; }

	operator HANDLE () 
	{ 
		return m_hEvent; 
	}

	// sort operators
	bool operator < ( SysEvent & event )
	{
		if ( m_hEvent < event.m_hEvent )
			return true;
		else
			return false;
	}

	bool operator == ( SysEvent & event )
	{
		if ( m_hEvent == event.m_hEvent )
			return true;
		else
			return false;
	}

	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 + -