编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推

来源:互联网 发布:怎样进入人工智能行业 编辑:程序博客网 时间:2024/04/27 07:03


编写一个程序,开启3个线程,这3个线程的ID分别为ABC,每个线程将自己的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;}