BaseClasses学习(-)CAMEvent
2016-07-19 14:25
232 查看
CAMEvent是Baseclasses提供的对windows自带的event的一种包装.
实现如下:
创建时一般采用CAMEvent Test(TRUE)的方式创建,如果参数为TRUE则m_hEvent是一个手动重置事件,如果参数为FALSE或者默认则m_hEvent是一个自动重置事件,一般会采用手动重置事件.
(1)手动事件是需要手动reset的,自动的是在被wait以后自动 reset.
(2)手动实践一旦被signal,所有等待的线程全部工作,自动的只有一个工作.除非再次signal
其中Check()函数检查事件是否被set,如果是signal状态返回TRUE,否则返回FALSE.
实现如下:
// 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.
相关文章推荐
- 网站SEO优化的词怎么写?
- Mybatis中模糊查询的各种写法
- 源码-PL/SQL从入门到精通-第八章-记录与集合-Part 2
- UVALive 2037 Digital Rivers 【打表&二分】
- 安装Nginx
- 2.JVM类装载器
- Oracle与MySQL的几点区别
- Oracle与MySQL的几点区别
- Android开发技术周报 Issue#44
- static使用实例
- zabbix自动发现端口并监控
- VMWare虚拟机设置固定ip上网方法
- artDialog+plupload实现多文件上传
- Crash Recovery的一点理论知识
- 面试题
- JAVA命名规则
- 创业step one
- 图像基本概念
- 特征选择常用算法综述
- Android List<Map<String,String>转json(例子)