线程同步----事作(Event)

本文详细介绍了Event对象的概念及其在多线程编程中的应用。探讨了如何通过设置bManualReset和bInitialState参数来控制事件对象的行为,并提供了创建、设置及重置事件对象的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Event 对象最大的用途,正是因为它们的状态完全在你掌控之下。Mutex 和 semaphore 就不一样了,它们的状态会因为诸如 WaitXXX( ) 之类的函数调用而变化。所以你可以精确告诉一个 event 对象做什么事,以及什么时间去做。
创建事件:
HANDLE CreateEvent(
  LPSECURITY_ATTRIBUTES lpEventAttributes, // SD
  BOOL bManualReset,                       // reset type
  BOOL bInitialState,                      // initial state
  LPCTSTR lpName                           // object name
);

bManualReset:为 FALSE,表示这个 event 将在变成激发状态之后,自动重置为非激发状态。

bManualReset:为 TRUE ,表示不会自动重置,必须靠程序操作(ResetEvent( ))才能将激发状态重置为非激发状态。

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

lpName: event 对象的名称。

操作事作:
//把 event 对象设为激发状态
BOOL SetEvent(
  HANDLE hEvent   // handle to event
);

//把 event 对象设为非激发状态
BOOL ResetEvent(
  HANDLE hEvent   // handle to event
);

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

//如果是 Auto Reset Event: 
//把 event 对象设为激发状态,唤醒"一个"等待中的线程,然后 event 恢复为非激发状态。
BOOL PulseEvent(
  HANDLE hEvent   // handle to event object
);

示例代码:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值