1 事件锁的类定义,如下:
#include <windows.h>
class CMyEvent
{
public:
CMyEvent();
~CMyEvent();
public:
BOOL SetEvent();
BOOL ReSetEvent();
void Wait(int msSecond = INFINITE);
private:
HANDLE m_handle;
bool m_bOK;
};
2 实现
#include "MyEvent.h"
CMyEvent::CMyEvent()
{
// 创建一个手动的非信号且无名称的事件对象
m_handle = ::CreateEvent(NULL, TRUE, FALSE, NULL);// 手动重置对象,初始状态为非信号状态
ASSERT(m_handle != NULL);
if (!m_handle)
{
DWORD dr = ::GetLastError();
m_bOK = false;
}
else
{
m_bOK = true;
}
}
CMyEvent::~CMyEvent()
{
if (m_bOK)
{
::CloseHandle(m_handle);
}
}
BOOL CMyEvent::SetEvent()
{
if (m_bOK)
{
return ::SetEvent(m_handle);
}
return FALSE;
}
BOOL CMyEvent::ReSetEvent()
{
if (m_bOK)
{
return ::ResetEvent(m_handle);
}
return FALSE;
}
void CMyEvent::Wait(int msSecond)
{
DWORD dwCode = 0;
bool bRet = false;
dwCode = ::WaitForSingleObject(m_handle, msSecond);
if (WAIT_OBJECT_0 != dwCode)
{
bRet = false;
}
else
{
bRet = true;
}
//return bRet;
}
3 实例运用
A 声明
CMyEvent m_pEvent;
B 等待受信状态,一般用到线程中
m_pEvent.Wait();
C 设置受信
m_pEvent.SetEvent();
D 设置未受信
m_pEvent.ReSetEvent();