Halcon机器视觉论坛

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 547|回复: 0
收起左侧

[资料] CreateEvent的用法

[复制链接]
  • TA的每日心情
    耍酷
    昨天 09:23
  • 签到天数: 639 天

    连续签到: 3 天

    [LV.9]以坛为家II

    353

    主题

    1360

    帖子

    5281

    积分

    Rank: 9

    积分
    5281

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

    发表于 2018-3-22 17:54:36 | 显示全部楼层 |阅读模式

    管理员 |主题 353|帖子 1360|积分 5281

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x

    事件对象就像一个开关:它只有两种状态---开和关。当一个事件处于”开”状态,我们称其为”有信号”否则称为”无信号”。可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是”无信号”就让该线程睡眠,这样该线程占用的CPU时间就比较少。

    产生事件对象的函数如下:  

    HANDLE     CreateEvent(

            LPSECURITY_ATTRIBUTES     lpEventAttributes,     //     SD   

            BOOL     bManualReset,                                                 //     reset     type   

            BOOL     bInitialState,                                                      //     initial     state   

            LPCTSTR     lpName                                                       //     object     name   

        );   

        该函数创建一个Event同步对象,如果CreateEvent调用成功的话,会返回新生成的对象的句柄,否则返回NULL。

    参数说明:

        lpEventAttributes     一般为NULL   

        bManualReset               创建的Event是自动复位还是人工复位.如果true,人工复位,   一旦该Event被设置为有信号,则它一直会等到ResetEvent()API被调用时才会恢复 为无信号.     如果为false,Event被设置为有信号,则当有一个wait到它的Thread时,  该Event就会自动复位,变成无信号.   如果想 在每次调用WaitForSingleObject 后让WINDOWS为您自动地把事件地状态恢复为”无信号”状态,必须把该参数设为FALSE,否则,您必须每次调用ResetEvent函数来清除事件 的信号。

        bInitialState             初始状态,true,有信号,false无信号   

        lpName                  事件对象的名称。您在OpenEvent函数中可能使用。

    注释:

        一个Event被创建以后,可以用OpenEvent()API来获得它的Handle,用CloseHandle()    来关闭它,用SetEvent()或PulseEvent()来设置它使其有信号,用ResetEvent()       来使其无信号,用WaitForSingleObject()或WaitForMultipleObjects()来等待其变为有信号.   

       

        PulseEvent()是一个比较有意思的使用方法,正如这个API的名字,它使一个Event 对象的状态发生一次脉冲变化,从无信号变成有信号再变成无信号,而整个操作是原子的.   

        对自动复位的Event对象,它仅释放第一个等到该事件的thread(如果有),而对于人工复位的Event对象,它释放所有等待的thread.  


    这里有两个API函数用来修改事件对象的信号状态:SetEvent和ResetEvent。前者把事件对象设为”有信号”状态,而后者正好相反。

    在事件对象生成后,必须调用WaitForSingleObject来让线程进入等待状态,该函数的语法如下:  

    WaitForSingleObject proto hObject:DWORD, dwTimeout:DWORD  

    hObject -->指向同步对象的指针。事件对象其实是同步对象的一种。

    dwTimeout --> 等待同步对象变成”有信号”前等待的时间,以毫秒计。当等待的时间超过该值后无信号同步对象仍处于”无信号”状态,线程不再等待, WaitForSingleObject函数会返回。如果想要线程一直等待,请把该参数设为INFINITE(该值等于0xffffffff)。


    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    Halcon鸟叔机器视觉1鸟叔机器视觉 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用反馈 | 51Halcon论坛管理团队论坛管理团队

    申请友链| 小黑屋| 手机版| Archiver| Halcon机器视觉论坛  

    粤ICP备15095995号-2 粤公网安备44030602000670号

    Powered by Discuz! X3.4 Licensed© 2015-2019 Comsenz Inc.

    快速回复 返回顶部 返回列表