zoukankan      html  css  js  c++  java
  • BaseClasses学习(-)CAMEvent

    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.

  • 相关阅读:
    POJ2376 Cleaning Shifts
    百度首页图标
    NOIP2016换教室
    CH3803扑克牌
    【POJ2723】Get Luffy Out
    【USACO13DEC】 最优挤奶
    【SP2916】Can you answer these queries V
    【线段树】各种模板集合
    【SCOI2013】摩托车交易
    【CF1174D】 Ehab and the Expected XOR Problem
  • 原文地址:https://www.cnblogs.com/liuyalunuli/p/5684677.html
Copyright © 2011-2022 走看看