三個線程打印ABC10次,ABCABCABC....
阿新 • • 發佈:2017-07-05
控制臺應用程序 pre event main names .com obj ace nap
// ConsoleApplication2.cpp : 定義控制臺應用程序的入口點。 // #include "stdafx.h" #include <iostream> #include "windows.h" #include<string> using namespace std; HANDLE hEventA; HANDLE hEventB; HANDLE hEventC; DWORD WINAPI funproc(LPVOID lpparentet) { string s = (char * )lpparentet; int count = 0; string sA = "A"; string sB = "B"; string sC = "C"; while (count < 10) { Sleep(100); if (sA.compare(s)==0) { DWORD dwRet = WaitForSingleObject(hEventA, INFINITE); if (dwRet == WAIT_OBJECT_0) { printf("A"); count++; SetEvent(hEventB); } } if (sB.compare(s) == 0) { DWORD dwRet = WaitForSingleObject(hEventB, INFINITE); if (dwRet == WAIT_OBJECT_0) { printf("B"); count++; SetEvent(hEventC); } } if (sC.compare(s) == 0) { DWORD dwRet = WaitForSingleObject(hEventC, INFINITE); if (dwRet == WAIT_OBJECT_0) { printf("C"); count++; SetEvent(hEventA); } } } return 0; } int main() { hEventA = CreateEvent(NULL, false, true, NULL); hEventB = CreateEvent(NULL, false, false, NULL); hEventC = CreateEvent(NULL, false, false, NULL); HANDLE hThreadA = CreateThread(NULL, 0, funproc, "A", 0, NULL); HANDLE hThreadB = CreateThread(NULL, 0, funproc, "B", 0, NULL); HANDLE hThreadC = CreateThread(NULL, 0, funproc, "C", 0, NULL); Sleep(10000); return 0; }
三個線程打印ABC10次,ABCABCABC....