CreateEvent 、PulseEvent的用法

HANDLE     CreateEvent(  
        LPSECURITY_ATTRIBUTES     lpEventAttributes,     //     SD  
        BOOL    bManualReset,                                                 //     reset     type  
        BOOL     bInitialState,                                               //     initial     state  
        LPCTSTR     lpName                                                         //     object     name  
    );  
    该函数创建一个Event同步对象,并返回该对象的Handle   
    
    lpEventAttributes     一般为NULL  
    bManualReset               创建的Event是自动复位还是人工复位     ,如果true,人工复位,   
    一旦该Event被设置为有信号,则它一直会等到ResetEvent()API被调用时才会恢复  
    为无信号.     如果为false,Event被设置为有信号,则当有一个wait到它的Thread时,   
    该Event就会自动复位,变成无信号.  
    bInitialState             初始状态,true,有信号,false无信号  
    lpName                           Event对象名  
   
   
一个Event被创建以后,可以用OpenEvent()API来获得它的Handle,用CloseHandle()  
   
来关闭它,用SetEvent()或PulseEvent()来设置它使其有信号,用ResetEvent()  
   
来使其无信号,用WaitForSingleObject()或WaitForMultipleObjects()来等待  
   
其变为有信号.  
   
   
PulseEvent()是一个比较有意思的使用方法,正如这个API的名字,它使一个Event  
   
对象的状态发生一次脉冲变化,从无信号变成有信号再变成无信号,而整个操作是原子的.  
   
对自动复位的Event对象,它仅释放第一个等到该事件的thread(如果有),而对于  
   
人工复位的Event对象,它释放所有等待的thread.

VC的初学者再学习线程概念的时候往往碰到CreateEvent()函数的使用,对于其中的参数不甚理解,对此做如下说明:

函数原型:

HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES

lpEventAttributes
,
                     
// pointer to security attributes
BOOL
bManualReset
, // flag for manual-reset
event
BOOL bInitialState, // flag
for initial state
LPCTSTR lpName      // pointer to
event-object name
);

其中有四个参数,分别注解

LPSECURITY_ATTRIBUTES pEventAttributes 安区参数
一般用户不用考虑它

BOOL bManualReset     表示SetEvent
置位,WaitForSingleObject使用以此后 信号量的有无,为TRUE 的时候,表示有信号,为FALSE为无信号,也可以理解为SetEvent
的作用是置一次信号,与PulseEvent函数作用相同了。

BOOL bInitialState,    表示初始时的信号量有无,为TRUE
的时,表示有信号,反之无信号

LPCTSTR lpName       信号量的别名

 

其中主要以BOOL bManualReset   , BOOL
bInitialState, 的使用最为重要,采用那种配对方式取决于程序的工作方式了。

 

时间: 2024-12-09 17:54:40

CreateEvent 、PulseEvent的用法的相关文章

js 中 document.createEvent的用法_javascript技巧

<a class="comment-mod" onclick="alert('ss')" href="#">评论</a> 如果用户直接查看文章列表,那么所有的评论以及评论框都是不显示的,但是如果用户通过别的页面比如首页的个人动态直接定位到这篇日志,那么评论就应该全部显示.而列表页和查看单个条目的页面是同一个页面,这就要求我判断一下用户是否定位到该篇日志,如果是,就通过JS来触发 A 标签的点击事件. 一开始我尝试了一些方法

WaitForMultipleObject与MsgWaitForMultipleObjects用法 .

from:http://blog.csdn.net/byxdaz/article/details/5638680 用户模式的线程同步机制效率高,如果需要考虑线程同步问题,应该首先考虑用户模式的线程同步方法. 但是,用户模式的线程同步有限制,对于多个进程之间的线程同步,用户模式的线程同步方法无能为力.这时,只能考虑使用内核模式. 用户模式与内核模式线程同步机制比较:   用户模式 内核模式 优点 线程同步机制速度快   支持多个进程之间的线程同步 防止死锁 缺点 容易陷入死锁状态 多个进程之间的线

python中enumerate函数用法实例分析

  本文实例讲述了python中enumerate函数用法.分享给大家供大家参考.具体分析如下: 今日发现一个新函数 enumerate .一般情况下对一个列表或数组既要遍历索引又要遍历元素时,会这样写: ? 1 2 for i in range (0,len(list)): print i ,list[i] 但是这种方法有些累赘,使用内置enumerrate函数会有更加直接,优美的做法,先看看enumerate的定义: ? 1 2 3 4 5 6 7 def enumerate(collect

php中$this、static、final、const、self的用法

  本篇文章主要分项了一下关于php类中的$this,static,final,const,self这几个关键字使用方法. $this $this表示当前实例,在类的内部方法访问未声明为const及static的属性时,使用$this->value='phpernote';的形式.常见用法如: $this->属性 $this->方法 举例如下:  代码如下   <?php class MyClass{  private $name;  public  function __cons

文件/目录权限设置命令chmod的详细用法

chmod是文件/目录权限设置的命令,在Linux中经常遇到,本博文以下总结chmod的详细用法.  Linux/Unix的档案调用权限分为三级,即档案拥有者user.群组group.其他other.u表示该档案的拥有者,g表示与该档案的拥有者属于同一个群体(group)者,o表示其他以外的人,a表示这三者皆是. + 表示增加权限.- 表示取消权限.= 表示唯一设定权限. r表示可读取,w表示可写入,x表示可执行.   举例说明: (1).将档案file1.txt 设为所有人皆可读取: chmo

Html5 CSS3新标签解释及用法

HTML 5 是一个新的网络标准,目标在于取代现有的 HTML 4.01, XHTML 1.0 and DOM Level 2 HTML 标准.它希望能够减少浏览器对于需要插件的丰富性网络应用服务(plug-in-based rich internet application,RIA),如Adobe Flash, Microsoft Silverlight, 与 Sun JavaFX 的需求. HTML 5 提供了一些新的元素和属性,反映典型的现代用法网站.其中有些是技术上类似 <div> 和

Emacs之魂(二):一分钟学会人界用法

Emacs之魂(一):开篇Emacs之魂(二):一分钟学会人界用法Emacs之魂(三):列表,引用和求值策略Emacs之魂(四):标识符,符号和变量Emacs之魂(五):变量的"指针"语义Emacs之魂(六):宏与元编程Emacs之魂(七):变量捕获与卫生宏Emacs之魂(八):反引用与嵌套反引用Emacs之魂(九):读取器宏 上文提到了编辑器之战, 据江湖传说,Emacs被称为"神的编辑器", Emacs有着无与伦比的可扩展性和可定制性,简直变成了一个"

vb和Excel简单运用嗯宏的用法

问题描述 vb和Excel简单运用嗯宏的用法 如何在点击Excel时运行已经录制的宏,在宏里面输入什么代码,求后台代码,求大神 解决方案 1.录制好宏,并取名. 2.在Excel文件的VBA环境中,双击ThisWorkbook进入代码窗口. 3.写入下列代码: Private Sub Workbook_Open() '已经录制的宏 End Sub

详解CSS中@supports的用法

基于浏览器的特性检测大家应该已经很熟悉了,特别是modernizr.js推出来之后.其实w3c也出了规范,可以基于css来做一些特性检测,也就是@supports,这个特性已经有两年多了,之前浏览器支持度不够,现在webkit nightly也开始支持了,也就是说safari 9会支持到,这样的话,Blink+webKit+gecko都支持了,只剩下IE浏览器不支持了,嗯,这样更方便对IE差异化处理了. 但是@supports并不能完全替代JS的特性检测方法,它只支持对CSS属性的检测,其它HT