windows-nt/Source/XPSP1/NT/printscan/ui/uicommon/simevent.h
2020-09-26 16:20:57 +08:00

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