Event 事件对象

理解Event对象的使用与特性
本文详细介绍了Event对象在编程中的应用,包括其状态控制、创建方式、以及SetEvent、ResetEvent和PulseEvent等关键函数的使用方法。重点阐述了手动重置与自动重置的区别,并通过实例说明了如何精准控制线程的执行流程。

Event 对象之所以有大用途,正是因为它们的状态完全在你掌控之下Mutexes sem aphores 就 不 一 样 了 , 它 们 的 状 态 会 因 为 诸 如WaitForSingleObject() 之类的函数调用而变化。所以, 你可以精确告诉一个event 对象做什么事,以及什么时候去做


Event 对象是一种核心对象,它的唯一目的就是成为激发状态或未激发状态



HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,
BOOL bManualReset,
BOOL bInitialState,
LPCTSTR lpName
);
参数
lpEventAttributes 安全属性。 NULL 表示使用默认属性。


bManualReset 如果是 TRUE ,表示不会自动重置,必须靠程序操作(调用 ResetEvent() )才能将激发状态的 event 重置为非激发状态。如为 FALSE ,表示这个 event 将在变成激发状态(因而唤醒一个线程)之后,自动重置( reset)为非激发状态。

true表示该event为手动重置;false表示为自动重置。重置就是reset,表示将event设置为未激活状态。


bInitialState 如为 TRUE ,表示这个 event 一开始处于激发状态。如为 FALSE ,则表示这个 event 一开始处于非激发状态


lpName Event 对象的名称。任何线程或进程都可以根据这个文字名称,使用这一 event 对象。




1.SetEvent() event 对象设为激发状态

2.ResetEvent() event 对象设为非激发状态(译注:在此我要提醒读者,"Reset" 的意思是“设定为非激发状态”,而非“重新设定为
激发状态”。)

3.PulseEvent()  (pulse,跳动,调整)

如果是一个 Manual Reset Event :把 event 对象设为激发状态,唤醒“所有”等待中的线程,然后 event 恢复为非激发
状态。

如果是一个 Auto Reset Event:把 event 对象设为激发状态,唤醒“一个”等待中的线程,然后 event 恢复为非激发状态。


 总结:pulseEvent()的作用,类似于SetEvent()和reset()函数。都是将一个event设置为激活状态,但是紧接着,该event会变为非激活状态。这就是“pulse”跳动的由来。


pulseEvent()唤醒一个等待中的线程后,event的状态变为非激活状态。这是因为被该event唤醒的线程拥有了该event的使用权。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值