C++ 多线程

CreateEvent

CreateEvent(
    __in_opt LPSECURITY_ATTRIBUTES lpEventAttributes,
    __in     BOOL bManualReset,
    __in     BOOL bInitialState,
    __in_opt LPCSTR lpName
    );

bManualReset: 指定将事件对象创建成手动复原还是自动复原。
如果是TRUE, 那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。  
如果是FALSE,当事件被一个等待线程释放以后,系统将会自动将事件状态复原为无信号状态。

bInitialState:指定事件对象的初始状态;  
当TRUE, 初始状态为有信号状态;  当FALSE, 初始状态为无信号状态。

SetEvent / ResetEvent

分别将EVENT置为这两种状态分别是有信号状态与无信号

WaitForSingleObject / WaitForMultipleObjects

WaitForSingleObject(
    _In_ HANDLE hHandle,
    _In_ DWORD dwMilliseconds
    );
    
参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT。

WaitForSingleObject 的返回值有以下三种情况:
WAIT_OBJECT_0:表示你等待的对象(比如线程、互斥体)已的正常执行完成或完成释放。
WAIT_TIMEOUT:表示你等待的对象在还没完成之前,由 WaitForSingleObject 设置的时间已经超时。
WAIT_ABANDONED:这是针对等待对象是互斥体的情况,当互斥体对象虽然没有被占用它的线程释放,但是占用它的线程已提前中止时,WaitForSingleObject 就返回此值。

WaitForSingleObject函数用来检测 hHandle事件的信号状态
当函数的执行时间超过dwMilliseconds就返回,
如果参数dwMilliseconds为INFINITE时 函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回直才执行后面的代码。

你可能感兴趣的