一、综述:

SetEvent()使当前事件对象处于有信号状态,当前的这个线程可以继续执行。
ResetEvent()是当前事件对象处于无信号状态,当前的线程处于睡眠状态,不能执行。

设置为TRUE就是有信号状态CreateEvent(,,TRUE,)  = CreateEvent(,,FALSE,) + SetEvent()

CreateEvent(,,TRUE,):是设置事件对象的起始状态为有信号;

CreateEvent(,,FALSE,) :是设置事件对象的起始状态为无信号;

SetEvent():手动设置事件对象的状态为有信号 。

二、详细介绍:

SetEvent()设置事件为有信号状态时,线程就执行完毕了!

BOOL SetEvent(HANDLE hEvent);

其中hEvent表示句柄,返回值:如果操作成功,则返回非零值,否则为0。

说明

设置事件的状态为有标记,释放任意等待线程。

如果事件是手工的,此事件将保持有标记直到调用ResetEvent,这种情况下将释放多个线程;

如果事件是自动的,此事件将保持有标记,直到一个线程被释放,系统将设置事件的状态为无标记;

如果没有线程在等待,则此事件将保持有标记,直到一个线程被释放。

用法

线程中SetEvent及WaitForSingleObject用法

SetEvent/ResetEvent分别将EVENT置为这两种状态分别是发信号与不发信号。

WaitForSingleObject()等待,直到参数所指定的OBJECT成为发信号状态时才返回,OBJECT可以是EVENT,也可以是其它内核对象。 当你创建一个线程时,其实那个线程是一个循环,不像上面那样只运行一次的。这样就带来了一个问题,在那个死循环里要找到合适的条件退出那个死循环,那么是怎么样实现它的呢?在Windows里往往是采用事件的方式,当然还可以采用其它的方式。在这里先介绍采用事件的方式来通知从线程运行函数退出来,它的实现原理是这样,在那个死循环里不断地使用WaitForSingleObject函数来检查事件是否满足,如果满足就退出线程,不满足就继续运行。当在线程里运行阻塞的函数时,就需要在退出线程时,先要把阻塞状态变成非阻塞状态,比如使用一个线程去接收网络数据, [1]  同时使用阻塞的SOCKET时,那么要先关闭SOCKET,再发送事件信号,才可以退出线程的。

当然我感觉重要应用方面还是用来锁定,实现所谓的pv功能。

在调用的过程中,所有线程都可以在一个等待函数中指定事件对象句柄。当指定的对象的状态被置为有信号状态时,单对象等待函数将返回。

对于多对象等待函数,可以指定为任意或所有指定的对象被置为有信号状态。当等待函数返回时,等待线程将被释放去继续运行。

初始状态在bInitialState参数中进行设置。使用SetEvent函数将事件对象的状态置为有信号状态。使用ResetEvent函数将事件对象的状态置为无信号状态。

当一个手动复原的事件对象的状态被置为有信号状态时,该对象状态将一直保持有信号状态,直至明确调用ResetEvent函数将其置为无符号状态。

当事件的对象被置为有信号状态时,任意数量的等待中线程,以及随后开始等待的线程均会被释放。

当一个自动复原的事件对象的状态被置为有信号状态时,该对象状态将一直保持有信号状态,直至一个等待线程被释放;系统将自动将此函数置为无符号状态。如果没有等待线程正在等待,事件对象的状态将保持有信号状态。

多个进程可持有同一个事件对象的多个句柄,可以通过使用此对象来实现进程间的同步。下面的对象共享机制是可行的:

·在CreateEvent函数中,lpEventAttributes参数指定句柄可被继承时,通过CreateProcess函数创建的子进程继承的事件对象句柄。

·一个进程可以在DuplicateHandle函数中指定事件对象句柄,从而获得一个复制的句柄,此句柄可以被其它进程使用。

·一个进程可以在OpenEvent或CreateEvent函数中指定一个名字,从而获得一个有名的事件对象句柄。

使用CloseHandle函数关闭句柄。当进程停止时,系统将自动关闭句柄。当最后一个句柄被关闭后,事件对象将被销毁。

SetEvent()和ResetEvent()相关推荐

  1. c++中SetEvent和ResetEvent的使用

    关于事件 事件(Event)是WIN32提供的最灵活的线程间同步方式,事件可以处于激发状态(signaled or true)或未激发状态(unsignal or false).根据状态变迁方式的不同 ...

  2. Windows编程之CreateEvent,WaitForSingleObject,SetEvent,ResetEvent函数

    一 Windows编程之CreateEvent,WaitForSingleObject,SetEvent,ResetEvent函数 1 CreateEvent HANDLE WINAPI Create ...

  3. SetEvent与ResetEvent

    事件(Event)是WIN32提供的最灵活的线程间同步方式,事件可以处于激发状态(signaled or true)或未激发状态(unsignal or false).根据状态变迁方式的不同,事件可分 ...

  4. windows线程 事件CreateEvent、SetEvent、ResetEvent、CloseHandle

    事件 相关问题 程序之前的通知的问题 事件的使用 1.创建事件 HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes,//事件安全属性 ...

  5. 线程中CreateEvent和SetEvent和ReSetEvent及WaitForSingleObject的用法

    概述 首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面. CreateEvent:创建或打开一个命名的或无名的事件对象. EVENT有两种状态:发信号 ...

  6. SetEvent,ResetEvent

    BOOL CEvent::SetEvent(); 将 CEvent 类对象的状态设置为有信号状态.如果事件是人工事件,则 CEvent 类对象保持为有信号状态,直到调用成员函数ResetEvent() ...

  7. CreateEvent、SetEvent、ResetEvent和WaitForSingleObject

    事件对象就像一个开关:它只有两种状态---开和关.当一个事件处于"开"状态,我们称其为"有信号",否则称为"无信号".可以在一个线程的执行函 ...

  8. C++事件的建立和使用SetEvent,ResetEvent

    一.事件是很常用的多线程同步互斥机制 函数原型如下所示,一共四个参数: HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // ...

  9. C++信号量实现线程间同步,windows使用SetEvent,linux使用sem_t,QT测试

    目录 windows使用CreateEvent.SetEvent.ResetEvent.WaitForSingleObject linux使用sem_init.sem_wait.sem_trywait ...

最新文章

  1. JVM:垃圾回收概述
  2. 我的第一个appium+Python自动化实例
  3. 什么叫系统的可扩展性?
  4. 【计算机网络】网络层 : ARP 协议 ( 使用 ARP 协议查找 目的主机 / 路由器 物理地址 )★
  5. php基础教程文档,PHP5基础教程
  6. undertow服务器分析_进入Undertow Web服务器
  7. php excel 垂直居中,完美实现文字图片水平垂直居中
  8. 爬虫-练习引导-豆办电影爬取-json数据的处理
  9. MinIO Docker 快速入门 ​​​​​​​
  10. java对焦_【Camera】手机相机自动对焦的3种方式及原理
  11. 微服务注册中心为什么要使用Consul替代Eureka?
  12. linux下的备份管理rsync
  13. 支付宝 支付宝扫描生成的二维码提示:码已失效,请刷新二维码后重试
  14. matlab数值微积分与方程数值求解,六、数值微积分与方程求解(MATLAB学习笔记)
  15. 游戏关卡设计理论普及
  16. java mpeg ps转mpeg-4_MPEG4格式转换器下载_枫叶MPEG4格式转换器(MPEG转换器) 9.0.5.0 共享版_极速下载站...
  17. C++ - priority_queue
  18. [日推荐]『车主码』解决临时停车、请人挪车的小麻烦
  19. biu Vue2高级知识点
  20. 新物联网!新电商平台!

热门文章

  1. #SATA# SATA 专业术语
  2. 【技术综述】人脸脸型分类研究现状
  3. 群与作用3.1-Sylow子群的例子
  4. html5网站抓取,微信上的网站 用HTML5获取地理位置
  5. 独立网店与淘宝店的区别
  6. 女孩子:现代的“三从四德”
  7. 腾讯云redis远程连接
  8. linux虚拟文件系统-文件的打开
  9. 连云港千卓贸易有限公司
  10. ubuntu 下安装WPS office及不能输入中文问题