CreateEvent函数会创建一个事件内核对象,该函数原型为
HANDLE CreateEvent(PSECURITY_ATTRIBUTE psa,
BOOL fManualReset,
BOOL fInitialState,
PCTSTR pszName)
其中fManualReset为TRUE时表示创建的事件为手动重置事件,即当有线程调用SetEvent将事件设置为已通知状态后,将要求成功等待的线程调用ResetEvent函数将事件设置成未通知状态。当手动重置事件得到通知时,等待这个事件的所有线程都变为可调度线程。若fManualReset为FALSE时则表示创建的事件是自动重置事件,系统会在等待线程释放后自动重置事件为未通知状态(WaitForSingleObject/WaitForMultipleObject,也就是自动重置事件成功等待的副作用,而手动重置事件没有成功等待的副作用,微软没有定义)。自动重置事件得到通知时,等待这个事件的所有线程中只有一个可以变为可调度线程。