刚学到这个感觉有点模糊/抽象,所以稍作整理
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
来源
https://frc6.com/index.php/archives/10/