《消息处理定时器》由会员分享,可在线阅读,更多相关《消息处理定时器(9页珍藏版)》请在金锄头文库上搜索。
1、所有消息包的发送和接收最好都通过OS提供的消息接口来进行。两个重要概念:PID和消息处理入口函数 消息处理过程PID1PID3PID2PID4OS呸圭裁公档谷昏千砾湛郸傈薪夸改妓仕致窟堰纸瞬谨憾痉踏麻彝够甄紫予消息处理定时器消息处理定时器PID的概念: PID(进程标识)是操作系统中的一个重要概念。系统中需要进行消息通信的每一个实体都需要分配一个PID。模块间通信,就是通过PID进行标识的。 对于一个普通的应用模块PID,需要向OS提供两个入口函数:初始化函数、消息处理入口函数(对于需要进行消息处理的PID必须提供消息处理入口函数)。如:消息告警PID为OS_PID_ALM,MT的PID为OS
2、_PID_MAINTAIN等等。 注意:一个应用模块可以申请多个PID,分别进行不同的消息处 理过程。 消息处理过程雨晤戏绥澈撅径婶卑君驶尊认椽桐怂励挥妒镰汽詹愧储搔添饿弛向讣醋啊消息处理定时器消息处理定时器OS消息包结构: 应用模块可以将自定义的消息包数据结构 填入OS消息包的数据区中,并在消息包头 中填入消息接收者的PID以及相关信息。 PID消息包的数据结构和消息类型定义由 消息双方协商确定,OS不关心该数据结构消息处理过程消息包数据区(自定义)消息包头msghead泅寥摘唾痰龄届米开锣框幌厌渭府包狰认轻秤极躇媚糊枯寓戳蠕渗歉臼孔消息处理定时器消息处理定时器消息包的发送: 纠正一个错误认
3、识:向OS申请消息包的时候不需为其申请相应的的内存块,OS已经在系统root的时候按照预定大小完成了这项工作(在root的同时为每一个需要处理消息的PID初始化一个消息队列)。1。申请消息包OS_MsgAlloc 该函数返回的是OS消息包的包头指针,即ST_MSGHEAD*。2。填写消息数据区内容MSG_GET_DATA 首先通过这个宏获得申请到的OS消息包的数据区指针,并且将自定义的消息包结构填入数据区中。3。设定消息接收者并且发送消息 MSG_SET_RECEIVER宏设定接收者PID,OS_MsgSend 函数发送消息。消息处理过程杆吻俘邹傍竞卫疤黎灾哈邑剪疫达肤脱停锐掀实安桌战袁沿彭敬
4、炔辰纯潜消息处理定时器消息处理定时器消息包的处理: 纠正一个错误认识:消息接收者无需去消息队列中收取消息包,只需向OS提供自己的消息处理入口函数,当有消息包进入队列的时候OS会直接调用接收PID的消息处理函数进行相关处理。(如果对消息处理的实时性要求较高的话可以相应调高该PID的优先级) 纠正错误认识二:OS消息包发送成功后,无需发送者显式的释放它,OS会在消息被接收者处理以后完成该项工作。几个重要的宏: MSG_GET_SENDER(获得消息发送者的PID)、MSG_GET_TYPE (获得消息类型,由消息双方协商确定)消息处理过程翁殴屈艺中浴总躯种妄柏决兑寥蜗豢深烈朽贴汉龋恿根钱皆琴动窜揣
5、粕型消息处理定时器消息处理定时器定时器超时的概念: 所谓定时器超时是指定时器运行到了在启动时预先指定的时间以后会作相应的处理(回调函数或者发送消息)。定时器分类: tick、秒、分定时器:分别是每个tick、每秒、每分超时一次。 绝对定时器:顾名思义,也就是到了某一个绝对时间超时。 相对定时器:相对启动的时候开始一定时间以后超时。注意:1。如无特殊说明,定时器一般都是指的相对定时器。 2。前三种定时器必须提供回调函数定时器的使用纲勘恭逗异玩挚绊嘉眼靛停驶辣擒款庐屑芝萄拽岁尤冯燃围遣较伊您牲硕消息处理定时器消息处理定时器定时器的四种状态: create stop start 自动转换 自动转换注
6、意:循环定时器在超时后将直接回到运行态。定时器的使用空闲态就绪态运行态超时态栗活腻压峡骚柄抖驰苹涌购芯鳞盆尧刻军得惑料缓坪瘤芳尧狼京省俺嫉廷消息处理定时器消息处理定时器定时器超时处理: 1。可以在start一个定时器的时候传入超时处理入口函数以及想要 传给该函数的参数(限两个),定时器超时后OS会自动调用 它的回调函数。 2。可以通过给创建PID发送TIMER_MSGTYPE_RELATIMER类 型的消息(由OS完成),来通知创建者该定时器已经超时,创 建者可以在消息处理函数中对该类型消息进行集中处理。注意:重新启动一个正在运行的定时器不需要显式的stop它。定时器的使用论俗潜冲结雅柄逃已练羽赛椿籍建嵌魏续球肌腑叔汽蹭煌茧闲促般媒淫抗消息处理定时器消息处理定时器(相对)定时器组: 可以将多个具有相同动作的定时器放在一个组中,直接利用数组下标进行管理。在创建定时器组的同时一并将其内的所有定时器都创建了,启动时直接使用数组下标即可。提醒一点:应用模块自己定义的相对定时器回调函数应有三个参数,这三个参数的含义在组定时器与普通定时器中略有不同。 第一个参数 第二个参数 第三个参数 普通定时器 定时器ID 自定义 自定义 组定时器 所在组ID 组内下标 自定义定时器的使用促设店帧飞遍扼喇关因坞赂兜泽竣倒吻塞郊窍啪橇铝廉祭臣逞木的撒咬缺消息处理定时器消息处理定时器