createEvent
要创建一的事件对象,可以调用Windows API中的CreateEvent。它可以创建一个有名的或匿名的事件对象,函数原型如下:
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,
BOOL bManualReset,
BOOL bInitialState,
LPCTSTR lpName
);
第一参数lpEventAttributes是一个指向SECURITY_ATTRIBUTES结构指针,由它决定该函数返回的句柄是否能够被子进程继承,如果为NULL,则不能被继承。通常指定为NULL(即默认的安全机制)。
第二参数 bManualReset,若指定为TRUE,则创建一个人工重置的事件对象,此时可以利用函数
BOOL ResetEvent(HANDLE hEvent)人工重置其状态为无信号的;
若指定为FALSE,系统将创建一个自动重置对象,系统将自动将其状态置为无信号的。
第三参数 bInitialState,若为TRUE则初始化创建的事件对象为有信号的(signaled),否则将创建的事件对象初始化为无信号的(nonsignaled)。
第四参数 lpName, 若指定为NULL,则创建一个匿名的事件对象。
返回值,如果函数成功,将返回一个该函数创建的事件对象的句柄。如果创建的事件对象是有名的,并且在调用该函数前,已经有一个同名的事件对象创建了,那么该函数将返回一个指向已存在的事件对象的句柄,并且调用GetLastError(void)函数时,将返回ERROR_ALREADY_EXISTS;如果函数调用失败,那么它将返回NULL。
ResetEvent
ResetEvent
这个函数把指定的事件对象设置为无信号状态。
BOOL ResetEvent(
HANDLE hEvent
);
参数说明:
hEvent
[in] 指向事件对象的句柄.由 CreateEvent or OpenEvent 函数返回。 这个句柄需要拥有EVENT_MODIFY_STATE 访问权限.
函数成功,返回非0值,否则返回0值,可以调用GetLastError得到错误的详细信息。
Remarks
一个事件对象一直都保持在无信号状态,直到显式调用 SetEvent or PulseEvent 函数把它设置到有信号状态。 这些无信号的事件对象会阻塞任何在内部调用wait函数的线程。
这个函数用于手动重置的事件对象。手动重置的对象在线程释放后必须手动置为无信号状态。 自动重置的事件对象在一个等待它成功的线程释放后会自动变为无信号状态。
重置一个无信号的事件对象没有任何效果。