WaitForMultipleObjects等待多个事件
WaitForMultipleObjects等待多个事件时,为什么总是有返回? 我认为应该是没有返回的,MSDN讲 bwaitall 如果为TRUE 则等待所有信号量有效在往下执行啊.
MFC代码:
HANDLE hDmmEvent[3];
...
OnInitDialog()
{
...
hDmmEvent[0]=CreateEvent(NULL,TRUE,FALSE,"1");
hDmmEvent[1]=CreateEvent(NULL,TRUE,FALSE,"1");
hDmmEvent[2]=CreateEvent(NULL,TRUE,FALSE,"1");
...
ResetEvent(hDmmEvent[0]);
ResetEvent(hDmmEvent[1]);
ResetEvent(hDmmEvent[2]);
...
}
UINT Thread1(LPVOID MM)
{
WaitForMultipleObjects(3,hDmmEvent,TRUE,INFINITE);
//WaitForSingleObject(hDmmEvent[0],INFINITE);
AfxMessageBox("Thread1");
return false;
}
UINT Thread2(LPVOID MM)
{
WaitForMultipleObjects(3,hDmmEvent,TRUE,INFINITE);
//WaitForSingleObject(hDmmEvent[1],INFINITE);
AfxMessageBox("Thread2");
return false;
}
void CTestDlg::OnOK()
{
// TODO: Add extra validation here
AfxBeginThread(Thread1,this);
AfxBeginThread(Thread2,this);
} WaitFor*Objects
[解决办法]
楼主,你好。根据你的代码:
hDmmEvent[0]=CreateEvent(NULL,TRUE,FALSE,"1");
hDmmEvent[1]=CreateEvent(NULL,TRUE,FALSE,"1");
hDmmEvent[2]=CreateEvent(NULL,TRUE,FALSE,"1");
你创建的是命名Event。有没有看过MSDN对命名Event的描述。If the named event object existed before the function call, the function returns a handle to the existing object and GetLastError returns ERROR_ALREADY_EXISTS.
说白了,代码中写的你创建了三个Event,实际上你就创建了一个Event。所以,每次就只有一个返回了。你把Event的名字换成别的,或者就不要创建命名的Event了。
如果,你喜欢C++,windows编程开发,有更多问题,可以到我的个人小站:果冻想向我咨询。