设置事件的状态为有标记,释放任意等待线程。如果事件是手工的,此事件将保持有标记直到调用ResetEvent。这种情况下将释放多个线程,如果事件是自动的,此事件将保持有标记,直到一个线程被释放,系统将设置事件的状态为无标记。如果没有线程在等待,则此事件将保持有标记,直到一个线程被释放。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

wince -- 线程中SetEvent及WaitForSingleObject用法相关推荐

  1. Java线程中关于Synchronized的用法

    synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种:  1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代 ...

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

    原文:线程中CreateEvent和SetEvent及WaitForSingleObject的用法

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

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

  4. 转:线程中CreateEvent和SetEvent及WaitForSingleObject的用法

    转自线程中CreateEvent和SetEvent及WaitForSingleObject的用法 首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面. ...

  5. 线程中CreateEvent、SetEvent、WaitForSingleObject的用法

    原文地址:https://www.cnblogs.com/MrYuan/p/5238749.html 首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,线程锁定方 ...

  6. [转载]线程中CreateEvent和SetEvent及WaitForSingle

    原文地址:线程中CreateEvent和SetEvent及WaitForSingleObject的用法作者:Sky丶Nie 首先介绍CreateEvent是创建windows事件的意思,作用主要用在判 ...

  7. Windows CreateEvent,SetEvent,WaitForSingleObject的用法

    http://blog.pfan.cn/embed/19089.html WaitForSingleObject的用法 DWORDWaitForSingleObject( HANDLE hHandle ...

  8. VC++之 CreateEvent和SetEvent及WaitForSingleObject的用法

    CreateEvent: 1.函数功能: 创建一个命名或匿名的事件对象 2.函数原型: HANDLE CreateEvent(   LPSECURITY_ATTRIBUTES lpEventAttri ...

  9. windows下线程同步的常见方法:CreateEvent和SetEvent及WaitForSingleObject windows下常见锁的实现 EnterCriticalSection

    windows下我们常用的线程同步的方法是 事件 首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面. CreateEvent 函功能描述:创建或打 ...

最新文章

  1. Transformer模型有多少种变体?复旦邱锡鹏教授团队做了全面综述
  2. lookup函数和vlookup_5个实用案例告诉你,为什么说Lookup函数比vlookup更简单
  3. 常用浏览器内核驱动下载地址
  4. MATLAB中函数模式和命令模式的区别
  5. STL中用erase()方法遍历删除元素
  6. HTTP Status 404 - No result defined for action com.csdhsm.struts.action.LoginAction and result error
  7. 18 | 案例篇:内存泄漏了,我该如何定位和处理?
  8. IE6 IE8下背景图片不显示问题
  9. Asp.Net Core 单元测试正确姿势
  10. Java 8备忘单中的可选
  11. 王者荣耀8月15日服务器维护,王者荣耀8月15日更新维护到什么时候 王者荣耀8月15日更新时间分享...
  12. Unity3d开发跳一跳AI(ML-agents)全纪录
  13. h5大前端常用网站以及npm模块整理
  14. 计算机网络原理优秀视频
  15. 家常炖菜,拌海带丝,炝土豆丝
  16. 把EXCEL拆分成两个窗口的办法
  17. Android12之OpenSL ES基础数据结构总结(十)
  18. 用Bing API接口实现同IP域名查询(Python版)
  19. 静态HTML网页设计作品 DIV布局家乡介绍网页模板代码---(太原 10页带本地存储登录注册 js表单校验)
  20. JavaScript中的二进制搜索算法

热门文章

  1. Visual C++中的ODBC编程
  2. 深入阅读Mina源码(3) —— Mina之IOAdapter(二)
  3. shellcode xor编码/解码[1]
  4. cpu是32位的 这指的是数据总线还是地址总线是32条?另外,电脑操作系统是3位的这指的是什么意思?指令是32...
  5. Windows系统管理和网络服务笔记生涯 源于BENET2.0课程(S2)
  6. Oracle随机函数的取法
  7. LeetCode每日一题: 搜索插入位置(No.35)
  8. Javascript:call(),apply()和bind()
  9. 2.6.29的一个节省内存的补丁
  10. mysql中不能update与safe update mode 有关