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
);
示例代码: