MsgWaitForMultipleObjects()函数的前两个参数该怎么设置
我要在主线程中等待一个工作线程退出,由于工作线程中有往主线程发消息的操作,所以,如果在主线程中用WaitForSingleObject等待,有时会导致死锁。现在我想用
MsgWaitForMultipleObjects()函数来实现。可是在使用中我发现,如果我要等待的是一个工作线程,按如下操作,还是会死锁。MsgWaitForMultipleObjects根本不返回。
dRet=MsgWaitForMultipleObjects(1,&m_pThread1>m_hThread,TRUE,INFINITE,QS_ALLINPUT);
可如果我将句柄数组设置为2个,就可以返回,也不会导致死锁。
HANDLE hArray[2]={m_pThread1>m_hThread};
dRet=MsgWaitForMultipleObjects(2,&hArray,TRUE,INFINITE,QS_ALLINPUT);
当我要等待两个工作线程退出时,如果我按下面这样操作,函数还是不返回
HANDLE hArray[2]={m_pThread1>m_hThread,m_pThread2>m_hThread};
dRet=MsgWaitForMultipleObjects(2,&hArray,TRUE,INFINITE,QS_ALLINPUT);
可如果我将等待的数组设置为3个,或是大于3,就可以返回了
HANDLE hArray[3]={m_pThread1>m_hThread,m_pThread2>m_hThread};
dRet=MsgWaitForMultipleObjects(3,&hArray,TRUE,INFINITE,QS_ALLINPUT);
可以保证,我其他的操作都是正确的。
请问,这是怎么回事,如果我想等待2个线程,难道就不能将句柄数组设置为2?