创建事件用线程等候接受 CreateEvent 14.4.29

本文通过一个具体的C++示例程序,展示了Windows环境下如何利用事件对象进行线程间的同步操作。介绍了事件对象的创建、触发及等待机制,并对比了自动重置与手动重置事件的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值