一共有两种不同的事件对象,分别是:
人工重置事件:得到通知时,等待该事件的所有线程都变为可调度线程
自动完成事件:得到通知时,等待该事件的所有线程只有一个变为可调度线程
相关函数主要包括:
HANDLE CreateEvent(
PSECURITY_ATTRIBUTES psa, //安全性参数
BOOL fManualReset, //人工重置事件True,自动重置事件False
BOOL fIntialState, //是不是初始化为已通知状态
PCTSTR pszName); //name
HANDLE OpenEvent(
DWORD fdwAccess, //事件的访问方式,一般为 EVENT_ALL_ACCESS
BOOL fInherit, //继承属性,true说明子进程可以继承该事件
PCTSTR pszName); //name
BOOL SetEvent(HANDLE hEvent); //将事件变为已通知状态
BOOL ResetEvent(HANDLE hEvent); //重置为未通知状态
程序实例:
程序的逻辑为:用户输入“c”,来控制线程的继续执行
DWORD WINAPI ThreadFuncEvent(PVOID pParam)
{
HANDLE eventHan = OpenEvent( EVENT_ALL_ACCESS, true, L"EventTest" );
WaitForSingleObject(eventHan, INFINITE);
cout << "Thread get event, countinue" <<endl;
return 0;
}
int main()
{
HANDLE hEvent = CreateEvent(NULL, false, false, L"EventTest");
cout << "int main()" <<endl;
HANDLE THandle = CreateThread(NULL, 0, ThreadFuncEvent, NULL, CREATE_SUSPENDED, NULL);
cout << "Main Thread" <<endl;
ResumeThread(THandle);
string inputStr;
while (true)
{
cin >> inputStr;
if ( inputStr == "c" )
{
SetEvent(hEvent);
break;
}
}
WaitForSingleObject(THandle, INFINITE);
cout << "main End" <<endl;;
CloseHandle(hEvent);
return 0;
}