事件对象属于
内核对象,它包含一个使用计数,一个用于标识该事件时一个自动重置还是一个人工重置的
布尔值,和另一个用于指定该事件处于已通知状态还是未通知状态的布尔值。
事件对象和
互斥对象,一样都属于
内核对象,它包含一个使用计数,一个用于标识该事件是一个自动重置还是一个人工重置的
布尔值,和另一个用于指定该事件处于已通知状态还是未通知状态的布尔值。
由上面所述,可见事件对象可分为两种,一种是人工重置的,另一种是自动重置的。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程。而当一个自动事件得到通知时,等待该事件的所有线程中只有一个线程变为可调度线程。
,可以调用Windows API中的
CreateEvent。它可以创建一个有名的或匿名的事件对象,
函数原型如下HANDLE CreateEvent( LPSECURITY_ATTRIBUTESlpEventAttributes,
第一参数lpEventAttributes是一个指向
SECURITY_ATTRIBUTES结构
指针,由它决定该函数返回的句柄是否能够被子进程继承,如果为NULL,则不能被继承。通常指定为NULL(即默认的安全机制)。
BOOL ResetEvent(HANDLE hEvent)人工重置其状态为无信号的;若指定为FALSE,系统将创建一个自动重置对象,系统将自动将其状态置为无信号的。
第三参数 bInitialState,若为TRUE则初始化创建的事件对象为有信号的(signaled),否则将创建的事件对象初始化为无信号的(nonsignaled)。
返回值,如果函数成功,将返回一个该函数创建的事件对象的句柄。如果创建的事件对象是有名的,并且在调用该函数前,已经有一个同名的事件对象创建了,那么该函数将返回一个指向已存在的事件对象的句柄,并且调用
GetLastError(
void)函数时,将返回ERROR_ALREADY_EXISTS;如果
函数调用失败,那么它将返回NULL。