1. 程式人生 > >三個線程打印ABC10次,ABCABCABC....

三個線程打印ABC10次,ABCABCABC....

控制臺應用程序 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....