DWORDCThreadTest::Wait(DWORDdwMilliseconds,DWORD&dwErr)
{
while(NULL!=m_ph[0])
{
DWORDdwRet=::WaitForMultipleObjects(m_iCount,m_ph,FALSE,dwMilliseconds);
switch(dwRet)
{
caseWAIT_TIMEOUT:
{
OutputDebugString("WAIT_TIMEOUT.\n");
}
returnm_iCount;
caseWAIT_FAILED:
{
dwErr=::GetLastError();
charszErr[256]={'\0'};
sprintf(szErr,"%s%d.\n","WaitForMultipleObjectsfail.Err:",dwErr);
OutputDebugString(szErr);
}
return-1;
//等待到一个返回的线程,关闭句柄,计数减一,句柄数组左移.
default:
{
intindex=dwRet-WAIT_OBJECT_0;
::CloseHandle(m_ph[index]);
m_ph[index]=NULL;
--m_iCount;
for(;(index<m_iCount)&&(index!=m_iSize-1);++index)
{
m_ph[index]=m_ph[index+1];
}
}
break;
}
}
returnm_iCount;
}
|