编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
#include <stdio.h> #include <stdlib.h> #include <iostream> #include <string> #include <stack> #include <windows.h> #include <process.h> using namespace std; HANDLE hEventA; HANDLE hEventB; HANDLE hEventC; HANDLE hThreadA; HANDLE hThreadB; HANDLE hThreadC; UINT __stdcall ThreadA(LPVOID lparam) { int n = 10; while(n--) { WaitForSingleObject(hEventA, INFINITE); printf("A"); ResetEvent(hEventA); SetEvent(hEventB); } return 1; } UINT __stdcall ThreadB(LPVOID lparam) { int n = 10; while(n--) { WaitForSingleObject(hEventB, INFINITE); printf("B"); ResetEvent(hEventB); SetEvent(hEventC); } return 1; } UINT __stdcall ThreadC(LPVOID lparam) { int n = 10; while(n--) { WaitForSingleObject(hEventC, INFINITE); printf("C\n"); ResetEvent(hEventC); SetEvent(hEventA); } return 1; } int main() { hEventA = CreateEvent(NULL, TRUE, FALSE, NULL); hEventB = CreateEvent(NULL, TRUE, FALSE, NULL); hEventC = CreateEvent(NULL, TRUE, FALSE, NULL); SetEvent(hEventA); hThreadA = (HANDLE)_beginthreadex(NULL, 0, ThreadA, NULL, 0, NULL); hThreadB = (HANDLE)_beginthreadex(NULL, 0, ThreadB, NULL, 0, NULL); hThreadC = (HANDLE)_beginthreadex(NULL, 0, ThreadC, NULL, 0, NULL); WaitForSingleObject(hThreadA, INFINITE); WaitForSingleObject(hThreadB, INFINITE); WaitForSingleObject(hThreadC, INFINITE); CloseHandle(hThreadA); CloseHandle(hThreadB); CloseHandle(hThreadC); CloseHandle(hEventA); CloseHandle(hEventB); CloseHandle(hEventC); return 0; }