当前位置: 首页 > article >正文

CreateEvent的理解



CreateEvent 用来创建或打开一个命名的或无名的事件对象,对于它的其他解释,请自行百科,这里只简单描述它的两种常用用法!


CreateEvent 的官方定义如下:

[cpp] view plain copy print ?
  1. HANDLE WINAPI CreateEvent(  
  2.   _In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes, //安全属性  
  3.   _In_     BOOL                  bManualReset, //设置信号复位方式为自动恢复为无信号状态(FALSE)还是手动恢复为无信号状态(TRUE)  
  4.   _In_     BOOL                  bInitialState, //初始状态  
  5.   _In_opt_ LPCTSTR               lpName  //信号名称,可以为Null  
  6. );  
HANDLE WINAPI CreateEvent(_In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes, //安全属性_In_     BOOL                  bManualReset, //设置信号复位方式为自动恢复为无信号状态(FALSE)还是手动恢复为无信号状态(TRUE)_In_     BOOL                  bInitialState, //初始状态_In_opt_ LPCTSTR               lpName  //信号名称,可以为Null
);

方式一:

[cpp] view plain copy print ?
  1. hEvent = CreateEvent(NULL, FALSE, TRUE, NULL); //复位方式为自动恢复到无信号状态,且初始状态为有信号.  
hEvent = CreateEvent(NULL, FALSE, TRUE, NULL); //复位方式为自动恢复到无信号状态,且初始状态为有信号.
此时当使用如下表达式后:

[cpp] view plain copy print ?
  1. DWORD dReturn = WaitForSingleObject(hEvent, 等待时间);  
DWORD dReturn = WaitForSingleObject(hEvent, 等待时间);

hEvent 就会变为无信号状态,如果在某个时候再次需要上面的式子成立并通过,则需要使用下面的语句使其变为有信号状态(此方式只能解锁一个等待线程,如需继续解锁,则需要再次使用下面的式子)

[cpp] view plain copy print ?
  1. SetEvent(hEvent)  
SetEvent(hEvent)


方式二:

[cpp] view plain copy print ?
  1. hEvent = CreateEvent(NULL, TRUE, TRUE, NULL); //复位方式为手动恢复到无信号状态,且初始状态为有信号.  
hEvent = CreateEvent(NULL, TRUE, TRUE, NULL); //复位方式为手动恢复到无信号状态,且初始状态为有信号.
此时当使用如下表达式后:
[cpp] view plain copy print ?
  1. DWORD dReturn = WaitForSingleObject(hEvent, 等待时间);  
DWORD dReturn = WaitForSingleObject(hEvent, 等待时间);

hEvent 就会自动再次变为有信号状态,上面的式子会直接执行并通过(同时有多个等待线程也会直接执行并通过),如果需要将hEvent设置为无信号状态,则需要手动使用下面的语句:

[cpp] view plain copy print ?
  1. ResetEvent(hEvent);  
ResetEvent(hEvent);


注:上面的复位方式指的是恢复到无信号状态的方式,若设置为TRUE,则表示需要手动将其置为无信号,若为FALSE,则会自动变为无信号,千万别和信号量变为有信号状态的方式搞混了!


*最后还有一点就是可以利用该函数创建进程间同步,下面是MSDN原文,利用方法暂时没去测试,以后遇到了再去折腾吧。

http://www.lryc.cn/news/2414668.html

相关文章:

  • 短剧小程序源码|小程序短剧平台源码搭建
  • background属性介绍
  • [翻译] LaTeX 中的列表
  • 内存地址的计算方法
  • ROS2 学习笔记(一)新建项目的基础流程
  • 分享个好用的开源录屏工具 Captura
  • 高速收发器之发送器详解(Transmitter)
  • 计算机程序设计艺术 介绍
  • CreateMutex创建互斥内核对象
  • 目前最受欢迎的12个Python web框架,你用过几个?
  • SqlCommand.ExecuteNonQuery()方法的使用注意
  • Delicatessen音乐名词什么意思
  • Tribon二次开发-COM接口的使用(抽取数据)
  • 全球免费公共 DNS 解析服务器 IP 地址列表推荐 (解决无法上网/加速/防劫持)
  • dubbo和zookeeper
  • Bloom filter 过滤(布隆过滤算法)原理
  • C语言实现集合的基本运算
  • 洛谷4438 [Hnoi2018]道路 【树形dp】
  • 多质量动态系统仿真(Matlab代码实现)
  • 推荐文章:领略东方Project新境界 —— thprac,你的弹幕射击游戏进阶之路
  • 以太坊的单位wei是什么?
  • Winrar通用注册码
  • cellpadding跟cesllspacing区别有什么(table篇)
  • 如何学习数据库
  • CTF比赛总结(小白必看)
  • DWR基本原理及其流程
  • 格兰杰因果分析
  • 文件的简单写入
  • kail-信息收集之DNS解析(dnsenum、dnsrecon、dnswalk)
  • free mobile sex java_Mysql-从原理到优化,深入浅出数据库索引