编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
方法 1
#include <process.h>
#include <Windows.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
struct ThreadNum{
char num;
};
int const LOOP = 10;
HANDLE g_hThreadEvent[3];
unsigned int __stdcall ThreadPrint(LPVOID);
int main(_In_ int _Argc, char* Argv[])
{
struct ThreadNum TNum[3];
TNum[0].num = 'A';
TNum[1].num = 'B';
TNum[2].num = 'C';
g_hThreadEvent[0] = CreateEvent(NULL, FALSE, TRUE, NULL);
g_hThreadEvent[1] = CreateEvent(NULL, FALSE, FALSE, NULL);
g_hThreadEvent[2] = CreateEvent(NULL, FALSE, FALSE, NULL);
enum{MAXHANDLE = 3};
HANDLE handle[MAXHANDLE];
handle[0] = (HANDLE)_beginthreadex(NULL, 0, ThreadPrint, (LPVOID)&TNum[0], 0, NULL);
handle[1] = (HANDLE)_beginthreadex(NULL, 0, ThreadPrint, (LPVOID)&TNum[1], 0, NULL);
handle[2] = (HANDLE)_beginthreadex(NULL, 0, ThreadPrint, (LPVOID)&TNum[2], 0, NULL);
WaitForMultipleObjects(MAXHANDLE, handle, TRUE, INFINITE);
for (int i = 0; i < MAXHANDLE; ++i)
{
CloseHandle(handle[i]);
}
getchar();
return 0;
}
unsigned int __stdcall ThreadPrint(LPVOID p)
{
for (int i = 0 ; i < LOOP; ++i)
{
WaitForSingleObject(g_hThreadEvent[((ThreadNum*)p)->num - 'A'], INFINITE);
printf("%c, 线程ID%5d\n", ((ThreadNum*)p)->num, GetCurrentThreadId());
SetEvent(g_hThreadEvent[(((ThreadNum*)p)->num - 'A' + 1)%3]);
}
_endthreadex(0);
return 0;
}