129 lines
3 KiB
C++
129 lines
3 KiB
C++
/*******************************************************************************
|
|
*
|
|
* (C) COPYRIGHT MICROSOFT CORPORATION, 1998
|
|
*
|
|
* TITLE: SIMEVENT.H
|
|
*
|
|
* VERSION: 1.0
|
|
*
|
|
* AUTHOR: ShaunIv
|
|
*
|
|
* DATE: 5/4/1999
|
|
*
|
|
* DESCRIPTION: Simple win32 event wrapper class
|
|
*
|
|
*******************************************************************************/
|
|
#ifndef __SIMEVENT_H_INCLUDED
|
|
#define __SIMEVENT_H_INCLUDED
|
|
|
|
#include "simstr.h"
|
|
|
|
class CSimpleEvent
|
|
{
|
|
private:
|
|
CSimpleString m_strEventName;
|
|
HANDLE m_hEvent;
|
|
public:
|
|
CSimpleEvent( bool bNoCreate = false )
|
|
: m_hEvent(NULL)
|
|
{
|
|
if (!bNoCreate)
|
|
Assign( CSimpleString(TEXT("")), NULL );
|
|
}
|
|
explicit CSimpleEvent( LPCTSTR pszEventName )
|
|
: m_hEvent(NULL)
|
|
{
|
|
Assign( pszEventName, NULL );
|
|
}
|
|
explicit CSimpleEvent( const CSimpleString &strEventName )
|
|
: m_hEvent(NULL)
|
|
{
|
|
Assign( strEventName, NULL );
|
|
}
|
|
CSimpleEvent( HANDLE hEvent )
|
|
: m_hEvent(NULL)
|
|
{
|
|
Assign( CSimpleString(TEXT("")), hEvent );
|
|
}
|
|
CSimpleEvent( const CSimpleEvent &other )
|
|
: m_hEvent(NULL)
|
|
{
|
|
Assign( other.EventName(), other.Event() );
|
|
}
|
|
CSimpleEvent &operator=( const CSimpleEvent &other )
|
|
{
|
|
return Assign( other.EventName(), other.Event() );
|
|
}
|
|
CSimpleEvent &operator=( HANDLE hEvent )
|
|
{
|
|
return Assign( TEXT(""), hEvent );
|
|
}
|
|
virtual ~CSimpleEvent(void)
|
|
{
|
|
Close();
|
|
}
|
|
bool Create( const CSimpleString &strEventName = TEXT("") )
|
|
{
|
|
Assign( strEventName, NULL );
|
|
return (m_hEvent != NULL);
|
|
}
|
|
CSimpleEvent &Assign( const CSimpleString &strEventName, const HANDLE hEvent )
|
|
{
|
|
Close();
|
|
if (!strEventName.Length() && !hEvent)
|
|
{
|
|
m_hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
|
|
}
|
|
else if (strEventName.Length())
|
|
{
|
|
m_strEventName = strEventName;
|
|
m_hEvent = CreateEvent( NULL, TRUE, FALSE, m_strEventName.String() );
|
|
}
|
|
else if (hEvent)
|
|
{
|
|
if (!DuplicateHandle( GetCurrentProcess(), hEvent, GetCurrentProcess(), &m_hEvent, 0, FALSE, DUPLICATE_SAME_ACCESS ))
|
|
m_hEvent = NULL;
|
|
}
|
|
return *this;
|
|
}
|
|
bool Close(void)
|
|
{
|
|
if (m_hEvent)
|
|
{
|
|
CloseHandle(m_hEvent);
|
|
m_hEvent = NULL;
|
|
}
|
|
m_strEventName = TEXT("");
|
|
return true;
|
|
}
|
|
void Reset(void)
|
|
{
|
|
if (!m_hEvent)
|
|
return;
|
|
ResetEvent(m_hEvent);
|
|
}
|
|
bool Signalled(void) const
|
|
{
|
|
if (!m_hEvent)
|
|
return (false);
|
|
DWORD dwRes = WaitForSingleObject(m_hEvent,0);
|
|
return(WAIT_OBJECT_0 == dwRes);
|
|
}
|
|
void Signal(void) const
|
|
{
|
|
if (!m_hEvent)
|
|
return;
|
|
SetEvent(m_hEvent);
|
|
}
|
|
CSimpleString EventName(void) const
|
|
{
|
|
return (m_strEventName);
|
|
}
|
|
HANDLE Event(void) const
|
|
{
|
|
return (m_hEvent);
|
|
}
|
|
};
|
|
|
|
#endif // #ifndef __SIMEVENT_H_INCLUDED
|