#include <iostream>
using namespace std;
#include <Windows.h>
HANDLE g_hEventFull;
HANDLE g_hEventEmpty;
unsigned long __stdcall ProducerThdEvent(LPVOID pram);
unsigned long __stdcall ConsumerThdEvent(LPVOID pram);
int _tmain(int argc, _TCHAR* argv[])
{
//注意第二、三个参数
//只有在Event 有信号的状态下,WaitForSingleObject(...)才会成功返回,
//第二个参数 表示WaitForSingleObject(...),之后,是否需要手动置为 “非信号” 状态,即,是否需要ResetEvent();
//若为FALSE,无需ResetEvent(),Event即变为“非信号”状态,若为TRUE,需要手动ResetEvent();
//第三个参数,表示初始状态是否 为“有信号”状态,创建 两个Even t需要,一个有信号,一个无信号,
//这样等待有信号的线程,就可以,WaitForSingleObject()成功,成功后,再将另一个线程等待的Event,
// 置为“有信 号”状态
g_hEventFull = CreateEvent(NULL,FALSE,FALSE,NULL);
g_hEventEmpty = CreateEvent(NULL,FALSE,TRUE,NULL);
DWORD dwPThId = 0;
DWORD dwCThId = 0;
HANDLE hProduce = CreateThread(NULL,0,ProducerThdEvent,NULL,0,&dwPThId);
HANDLE hConsumer = CreateThread(NULL,0,ConsumerThdEvent,NULL,0,&dwCThId);
DWORD dwWRet1 = WaitForSingleObject(hProduce,INFINITE);
DWORD dwWRet2 = WaitForSingleObject(hConsumer,INFINITE);
CloseHandle(hProduce);
CloseHandle(hConsumer);
return 0;
}
unsigned long __stdcall ProducerThdEvent(LPVOID pram)
{
do{
WaitForSingleObject(g_hEventEmpty,INFINITE);
cout<<"生成中...\n";
Sleep(1000);
SetEvent(g_hEventFull);
}while(1);
return 0;
}
unsigned long __stdcall ConsumerThdEvent(LPVOID pram)
{
do
{
WaitForSingleObject(g_hEventFull,INFINITE);
cout<<"消费中...\n";
Sleep(1000);
SetEvent(g_hEventEmpty);
} while (1);
return 0;
}