zoukankan      html  css  js  c++  java
  • 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, 的使用最为重要,采用那种配对方式取决于程序的工作方式了。

  • 相关阅读:
    推荐一个golang的json库
    TinyMind 多标签图像分类竞赛 之路
    动态环境下的slam问题如何解决?
    ubuntu16.04下安装opencv3.4.1及其扩展模块
    Ubuntu 16.04 编译OpenCV 问题解决stdlib.h: No such file or directory
    linux下升级gcc版本(gcc-7)
    基于LSD的直线提取算法
    PL-SLAM
    用U盘制作并安装WIN10 64位原版系统的详细教程(该方法应该适用于任何一版的原版操作系统)
    Win10正式版U盘安装教程
  • 原文地址:https://www.cnblogs.com/lidabo/p/3064714.html
Copyright © 2011-2022 走看看