// Event.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
#include "conio.h"
HANDLE g_hEvent=NULL;
HANDLE g_hEvent2=NULL;
//发送事件
DWORD WINAPI ThreadSend(LPVOID nParam){
while(1){
SetEvent(g_hEvent);
Sleep(1000);
SetEvent(g_hEvent2);
Sleep(1000);
}
return 0;
}
//等候事件(自动)
DWORD WINAPI ThreadRecv(LPVOID nParam){
while(1){
//等候事件的通知
WaitForSingleObject(g_hEvent,INFINITE);
printf("自动: %p\n",g_hEvent);
}
return 0;
}
//等候事件(手动)
DWORD WINAPI ThreadRecv2(LPVOID nParam){
while(1){
//等候事件的通知
WaitForSingleObject(g_hEvent2,INFINITE);
printf("手动: %p\n",g_hEvent2);
//消息状态的重置
ResetEvent(g_hEvent2);
}
return 0;
}
void CreateT(){
DWORD nID=0;
HANDLE hThread[4]={NULL};
hThread[0]=CreateThread(NULL,0,ThreadSend,NULL,0,&nID);
hThread[1]=CreateThread(NULL,0,ThreadRecv,NULL,0,&nID);
hThread[2]=CreateThread(NULL,0,ThreadRecv2,NULL,0,&nID);
}
int main(int argc, char* argv[])
{
//创建事件 第二个参数是事件重置的标识 如果是TURE WaitForSingleObject 就一直有信号不阻塞 必须手动设置信号状态
//false 就自动吧标识执行之后吧信号清空
//第三个参数 是表示创建的时候是否有信号
//自动设置信号状态
g_hEvent=CreateEvent(NULL,false,false,NULL);
//手动设置信号状态
g_hEvent2=CreateEvent(NULL,true,false,NULL);
CreateT();
getch();
CloseHandle(g_hEvent);
return 0;
}