事件对象的线程同步
#include "stdafx.h"
#include<iostream>
#include<Windows.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
DWORD WINAPI Fun1Proc(
LPVOID lpParamer //thread data;
);
DWORD WINAPI Fun2Proc(
LPVOID lpParamer
);
int tickets=100;
//事件对象
HANDLE g_hEvent;//建立事件对象句柄
void main()
{
//定义线程句柄
HANDLE hThread1;
HANDLE hThread2;
//创建事件对象
//需注意,事件对象需设置为自动重置,
//初始信号状态设定为有信号状态
g_hEvent=CreateEvent(NULL,FALSE,TRUE,NULL);
//创建线程;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
//主线程睡眠
Sleep(4000);
//关闭线程句柄
CloseHandle(hThread1);
CloseHandle(hThread2);
//关闭事件对象的句柄
CloseHandle(g_hEvent);
}
DWORD WINAPI Fun1Proc(
LPVOID lpParamer //thread data;
)
{
while(TRUE)
{
//事件对象等待事件对象变为有信号状态
WaitForSingleObject(g_hEvent,INFINITE);
if(tickets>0)
{
Sleep(1);
cout<<"hThread1 sells the "<<tickets--<<endl;
}
else
break;
//将事件对象重置为有信号状态
SetEvent(g_hEvent);
}
return 0;
}
DWORD WINAPI Fun2Proc(
LPVOID lpParamer //thread data;
)
{
while(TRUE)
{
//事件对象等待事件对象变为有信号状态
WaitForSingleObject(g_hEvent,INFINITE);
if(tickets>0)
{
Sleep(1);
cout<<"hThread2 sells the "<<tickets--<<endl;
}
else
break;
//将事件对象重置为有信号状态
SetEvent(g_hEvent);
}
return 0;
}