int main()
{
HANDLE hThrd1;
HANDLE hThrd2;
DWORD exitCode1 = 0;
DWORD exitCode2 = 0;
DWORD threadId;
hThrd1 = CreateThread(NULL,
0,
ThreadFunc,
(LPVOID)1,
0,
&threadId );
if (hThrd1)
printf("Thread 1 launched/n");
hThrd2 = CreateThread(NULL,
0,
ThreadFunc,
(LPVOID)2,
0,
&threadId );
if (hThrd2)
printf("Thread 2 launched/n");
for (;;)
{
printf("Press any key to exit../n");
getch();
GetExitCodeThread(hThrd1, &exitCode1);
GetExitCodeThread(hThrd2, &exitCode2);
if ( exitCode1 == STILL_ACTIVE )
puts("Thread 1 is still running!");
if ( exitCode2 == STILL_ACTIVE )
puts("Thread 2 is still running!");
if ( exitCode1 != STILL_ACTIVE
&& exitCode2 != STILL_ACTIVE )
break;
}
CloseHandle(hThrd1);
CloseHandle(hThrd2);
printf("Thread 1 returned %d/n", exitCode1);
printf("Thread 2 returned %d/n", exitCode2);
return EXIT_SUCCESS;
}
DWORD WINAPI ThreadFunc(LPVOID n)
{
Sleep((DWORD)n*1000*2);
return (DWORD)n * 10;
}
BOOL GetExitCodeThread(
HANDLE hThread,
LPDWORD lpExitCode
);
返回值:TRUE:执行成功,FALSE:执行失败
hThread:需要判断的线程句柄
lpExitCode:执行成功时,存放线程的状态码,如果是线程的返回值,表示线程执行完,
如果线程没执行完,返回STILL_ACTIVE,如果线程的返回值就是STILL_ACTIVE,就无法判断