线程为
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
初次运用多线程编程,有些不知所措,请指点~
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
初次运用多线程编程,有些不知所措,请指点~
你既然要 等待所有的线程执行完毕, 就直接
for(int i=0;i <10;i++)
{
Thread_temp[i]=CreateThread( NULL,0,RecvThread,&i, 0,NULL);
Sleep(500);
}
{
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;
}