前面说的互斥量Mutex与关键段CriticalSection都不能实现线程的同步,只能实现互斥,接下来我们用时间event就可以实现线程的同步了,事件也是一个内核对象。
一、相关函数说明
(一) 创建事件
1.函数原型
HANDLE WINAPI CreateEventW(
_In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes,
_In_ BOOL bManualReset,
_In_ BOOL bInitialState,
_In_opt_ LPCWSTR lpName
);
2.参数说明
-
第一个参数表示安全控制,一般直接传入NULL。
-
第二个参数确定事件是手动置位还是自动置位,传入TRUE表示手动置位,传入FALSE表示自动置位。如果为自动置位,则对该事件调用WaitForSingleObject()后会自动调用ResetEvent()使事件变成未触发状态。
-
第三个参数表示事件的初始状态,传入TRUR表示已触发。
-
第四个参数表示事件的名称,传入NULL表示匿名事件。
(二) 打开事件
1.函数原型
HANDLE WINAPI OpenEventW(
_In_ DWORD dwDesiredAccess,
_In_ BOOL bInheritHandle,
_In_ LPCW