线程为
DWORD WINAPI RecvThread(LPVOID lp)
{
int num=*(DWORD*)lp;
  
printf("in=%d\n",num); EnterCriticalSection(&gcs_main); printf("Thread %d \n",num);
int a;
a=0;
while(a<100000000)
{
// cout<<a<<endl;
a++;
}
cout<<"num="<<num<<",a="<<a<<endl;
LeaveCriticalSection(&gcs_main); return 0;
}
调用线程,并建立多线程
InitializeCriticalSection(&gcs_main);
HANDLE Thread_temp[10];
for(int i=0;i<groups.groupList.size();i++)
{
Thread_temp[i]=CreateThread( NULL,0,RecvThread,&i, 0,NULL); 
Sleep(500);
}
DWORD dwRet = 0;dwRet=WaitForMultipleObjects(10,Thread_temp,TRUE,100000);
if(dwRet==WAIT_TIMEOUT)
{
cout<<"WAIT_TIMEOUT"<<endl;
}
else if(dwRet==WAIT_FAILED)
{
cout<<"WAIT_FAILED"<<endl;
}
else
{
cout<<"wait:"<<(dwRet-WAIT_OBJECT_0)<<endl;
}DeleteCriticalSection(&gcs_main);
CloseHandle(Thread_temp);运行结果
in=0
Thread 0
in=1
num=0,a=100000000
Thread 1
WAIT_FAILED
main stop
Press any key to continue请问高手,为何WaitForMultipleObjects未起作用,并报WAIT_FAILED
初次运用多线程编程,有些不知所措,请指点~

解决方案 »

  1.   

    groups.groupList.size(), 是多少?
    你既然要 等待所有的线程执行完毕, 就直接
    for(int i=0;i <10;i++)
    {
    Thread_temp[i]=CreateThread( NULL,0,RecvThread,&i, 0,NULL);
    Sleep(500);
      

  2.   

    问题还真不少,从那考来的程序,给你整理了一下,你试试这个版本的DWORD WINAPI ThreadFunc(LPVOID lp)
    {
    int num=*(DWORD*)lp;  printf("in=%d\n",num);  EnterCriticalSection(&gcs_main);  printf("Thread %d \n",num); 
    int a; 
    a=0; 
    while(a < 100000000) 

    // cout < <a < <endl; 
    a++; 

    cout <<"num=" <<num <<",a=" <<a <<endl; 
    LeaveCriticalSection(&gcs_main);  return 0; }int main()
    {
    InitializeCriticalSection(&gcs_main); 
    HANDLE Thread_temp[10]; 
    for(int i=0;i <10; i++) 

    Thread_temp[i]=CreateThread( NULL, 0, ThreadFunc, &i, 0, NULL); 
    Sleep(500); 
    }  DWORD dwRet = 0;  dwRet=WaitForMultipleObjects(10,Thread_temp,TRUE,100000); 
    if(dwRet==WAIT_TIMEOUT) 

    cout <<"WAIT_TIMEOUT" <<endl; 

    else if(dwRet==WAIT_FAILED) 

    cout <<"WAIT_FAILED" <<endl; 

    else 

    cout <<"wait:" <<(dwRet-WAIT_OBJECT_0) <<endl; 
    }  DeleteCriticalSection(&gcs_main); 
    for(int i=0;i <10;i++) 

    CloseHandle(Thread_temp[i]);
    }  return 0;
    }
      

  3.   

    谢谢Ryanwen的解答,我是从源程序中截取出来,一些变量值未改过来,见笑了~
      

  4.   

    出现WAIT_FAILED后,调用GetLastError()看看是什么错误。我估计是Thread_temp某个线程handle无效,导致WaitForMultipleObjects失败