您的位置:首页 > 其它

BaseClasses学习(-)CAMEvent

2016-07-19 14:25 232 查看
CAMEvent是Baseclasses提供的对windows自带的event的一种包装.

实现如下:

// wrapper for event objects
class CAMEvent
{

// make copy constructor and assignment operator inaccessible

CAMEvent(const CAMEvent &refEvent);
CAMEvent &operator=(const CAMEvent &refEvent);

protected:
HANDLE m_hEvent;
public:
CAMEvent(BOOL fManualReset = FALSE, __inout_opt HRESULT *phr = NULL);
CAMEvent(__inout_opt HRESULT *phr);
~CAMEvent();

// Cast to HANDLE - we don't support this as an lvalue
operator HANDLE () const { return m_hEvent; };

void Set() {EXECUTE_ASSERT(SetEvent(m_hEvent));};
BOOL Wait(DWORD dwTimeout = INFINITE) {
return (WaitForSingleObject(m_hEvent, dwTimeout) == WAIT_OBJECT_0);
};
void Reset() { ResetEvent(m_hEvent); };
BOOL Check() { return Wait(0); };
};


创建时一般采用CAMEvent Test(TRUE)的方式创建,如果参数为TRUE则m_hEvent是一个手动重置事件,如果参数为FALSE或者默认则m_hEvent是一个自动重置事件,一般会采用手动重置事件.

(1)手动事件是需要手动reset的,自动的是在被wait以后自动 reset.

(2)手动实践一旦被signal,所有等待的线程全部工作,自动的只有一个工作.除非再次signal

其中Check()函数检查事件是否被set,如果是signal状态返回TRUE,否则返回FALSE.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: