1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include <Windows.h>
#include <Winbase.h>
#include <iostream>
DWORD WINAPI ThreadProc(LPVOID arg)
{
int *myNumber = (int*)arg;
while(*myNumber < 2000)
(*myNumber)++;
ExitThread(NO_ERROR);
}
int main()
{
SECURITY_ATTRIBUTES attr;
int gogol[5]={8,6,3,1,4};
HANDLE h[5]={0};
attr.nLength = sizeof(SECURITY_ATTRIBUTES);
attr.lpSecurityDescriptor = NULL;
attr.bInheritHandle = 0;
DWORD dwExitCode[5] ={0};
for(unsigned int i=0;i<5;++i)
{
h[i]=(HANDLE)CreateThread(&attr,0, ThreadProc ,(LPVOID)&(gogol[i]), 0,0);
}
/*
miaw:
for(unsigned int i=0;i<5;++i)
{
GetExitCodeThread(h[i], &dwExitCode[i]);
}
if(!((dwExitCode[0]==NO_ERROR)&&(dwExitCode[1]==NO_ERROR)&&(dwExitCode[2]==NO_ERROR)&&(dwExitCode[3]==NO_ERROR)&&(dwExitCode[4]==NO_ERROR)))
goto miaw;
*/
using namespace std;
DWORD er=0;
do
{
switch(er=WaitForMultipleObjects(5,h,TRUE,0))
{
case WAIT_OBJECT_0:
cout << "WAIT_OBJECT_0" << endl;
break;
case WAIT_ABANDONED_0:
cout << "WAIT_ABANDONED_0" << endl;
break;
case WAIT_TIMEOUT:
cout << "WAIT_TIMEOUT" << endl;
break;
case WAIT_FAILED:
cout << "WAIT_FAILED" << endl;
break;
default : //never happen
break;
}
}while(er==WAIT_TIMEOUT);
} |
Partager