// 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;
}