开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上,要求输出结果必须按ABC的顺序显示:ABCABC
#include "stdafx.h"
#include <process.h>
#include <cwindow.h>
const int THREADNUM = 3;
const int MAINLOOP = 10;
HANDLE hEventThread[THREADNUM];
HANDLE hThreadHandle[THREADNUM];
UINT WINAPI ThreadProc(LPVOID lpPram)
{
int num = (int)lpPram;
char cthread = num + 'A';
for(int i = 0; i < MAINLOOP ; i++)
{
WaitForSingleObject(hEventThread[num],INFINITE);
printf("子线程ID=%d 输出 %c\n",GetCurrentThreadId(),cthread);
SetEvent(hEventThread[(num+1)%THREADNUM]);
}
return 0;
}
int main(int argc, char* argv[])
{
printf("编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推\n");
int i = 0;
for(i =0; i<THREADNUM;i++)
hEventThread[i] = CreateEvent(FALSE,FALSE,FALSE,NULL);
for (i = 0; i< THREADNUM ; i++)
{
hThreadHandle[i] = (HANDLE)_beginthreadex(NULL,0,ThreadProc,(void*)i,0,NULL);
}
SetEvent(hEventThread[0]);
WaitForMultipleObjects(3,hThreadHandle,TRUE,INFINITE);
for (i = 0; i < THREADNUM;i++)
{
CloseHandle(hThreadHandle[i]);
CloseHandle(hEventThread[i]);
}
return 0;
}