Win32API中的Event

刚学到这个感觉有点模糊/抽象,所以稍作整理

CreateEvent

创建一个Event返回一个句柄(失败返回0)

参数

  • lpEventAttributes
    指向一个SECURITY_ATTRIBUTES结构(就是句柄可不可以被继承那个东西)
  • bManualReset
    为TRUE的话必须要用ResetEvent手动复位;FALSE的话当测试事件的函数返回时,对象会自动被复位

到这里就很容易懵逼,复位?置位?测试事件?没关系等待再看,看到后面不懂再会过来一起看就行

  • bInitialState
    TRUE则初始状态为置位;FALSE则初始状态是复位

(懵逼2连)

  • lpName
    指针:事件对象名称

WaitForSingleObject

等待Event:等待一个Event置位或超时就返回

参数

  • hHandle
    事件对象句柄
  • dwMilliseconds
    超时时间

Note

换句话说,则个函数的作用就是等待一个Event对象
如果在WaitForSingleObject调用时,事件对象状态为复位的话,线程将会在WaitForSingleObject处等待(不返回),直到事件对象状态变为置位或超时(超时时间:dwMilliseconds)后,WaitForSingleObject才会返回。如果调用CreateEvent时,参数bManualReset指定FALSE的话,WaitForSingleObject返回后会又自动把这个Event的状态给换成复位
现在再看看CreateEvent中的参数bManualReset应该也就不懵逼了。测试事件的函数在这里就是WaitForSingleObject
所以总结下,复位状态就得等,置位了才能过去(这话感觉好直白)

SetEvent

手动将Event状态设为置位

参数

  • hEvent
    事件对象句柄

ResetEvent

手动将Event状态设为复位

参数

  • hEvent
    事件对象句柄

补充说明

  • 置位在官方文档中被称为signaled
  • 复位在官方文档中被称为nonsignaled

本文还在这些地方发布了

  1. https://blog.csdn.net/u013289971/article/details/105502368
  2. https://github.com/frc123/Win32-Assembly-Learning/wiki/Win32API%E4%B8%AD%E7%9A%84Event

Tags:技术报告

Add a new comment.