一看就懂,一做就会:异步事件同步处理机制

一看就懂,一做就会:异步事件同步处理机制

  1. 函数列表
   	CreateEvent
   	ResetEvent
   	SetEvent
   	WaitForSingleObject
  1. 函数介绍
//创建事件,括号中的FALSE表示默认没有事件
HANDLE m_TestEvt = CreateEvent(NULL, FALSE, FALSE, NULL);

ResetEvent(m_TestEvt);//重置事件
SetEvent(m_TestEvt);//设置事件
WaitForSingleObject(m_TestEvt, 3000/*等待时间*/);
  1. 使用说明
    如上四个函数基于WINDOW实现,不同平台之间函数名称存在一定差异,基本思路一致,包括嵌入Linux等其它系统基本一致,函数名围绕事件展开:HANDLE m_TestEvt,思路及顺序:
    1、创建事件:CreateEvent;
    2、监控/等待事件:WaitForSingleObject;
    3、事件发生触发事件:SetEvent;
    4、事件多次触发,事件ID会计数,只处理一次事件:设置前复位掉前面的事件:ResetEvent;

  2. 实例代码


DWORD WINAPI HandleEvent(LPVOID pM)
{
	int dw = 0;
	while(1)
	{
		//	循环3秒超时等待,也修改成永久等待:
		dw = WaitForSingleObject(m_TestEvt, 3000/*等待时间*/);
		switch(dw)
		{
		case WAIT_TIMEOUT:
			//	此处3秒会自动超时一次,被执行
			break;
		case WAIT_FAILED:
			break;
		case WAIT_OBJECT_0:
			AfxMessageBox("SetEvent OK");
			break;
		default:
			break;
		}
	}
}

void OnUserSendEvent()
{
	//	复位事件
	ResetEvent(m_TestEvt);
	//	设置事件: 触发函数:WaitForSingleObject 此事件 -> WAIT_OBJECT_0
	SetEvent(m_TestEvt);
}
void test_main(void)
{
	//	创建工作线程
	AfxBeginThread((AFX_THREADPROC)HandleEvent, NULL, THREAD_PRIORITY_IDLE);
}
  1. 应用场景
    如上四个函数非常有用,可以提升程序的代码结构,适用于事件触发,类似于等待外部数据、或者数据同步,也可用于模块之间通信,

  2. 依赖基础
    对如上几个函数加深理解,需要对操作系统的原理有一定接触,同步的知识点,下期预告:资源互斥,可以有效解决资源访问同步,避免资源访问冲突,实现互斥锁,确保独享资源。

7、感兴趣的题材欢迎指教、批评指正,下期预告:资源互斥

评论留言

只做一看就懂,一做就会的技术,欢迎感兴趣的课题在评论区留言。

8、实例图片
如上:代码实现
下载代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Micro eagle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值