[发明专利]一种基于C语言的异步延时执行方法及执行装置有效
申请号: | 201710363591.2 | 申请日: | 2017-05-22 |
公开(公告)号: | CN107239276B | 公开(公告)日: | 2021-01-12 |
发明(设计)人: | 崔顺升;段俊彪;陈景超;陈钦宇;黄福荣 | 申请(专利权)人: | 广州安圣信息科技有限公司 |
主分类号: | G06F8/30 | 分类号: | G06F8/30 |
代理公司: | 佛山帮专知识产权代理事务所(普通合伙) 44387 | 代理人: | 胡丽琴 |
地址: | 510000 广东省广*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 语言 异步 延时 执行 方法 装置 | ||
本发明公开一种基于C语言的异步延时执行装置,其包括结构体定义模块、计数驱动模块和异步延时(重)调用模块;异步延时(重)调用模块设有计数值模块、注入事件模块和事件标签模块,结构体定义模块用于对事件结构体及需要发生的事件进行定义;计数驱动模块用于采用时间单位对调用模块中发生的注入事件进行计数,且在计数过程中,对触发的事件进行队列清除,对未触发的事件进行计数累加;异步延时(重)调用模块用于对指定的发生事件、事件异步发生的延时计数值和事件指针指向获取指定存储位置,并对同一事件标签代表的事件重新计数注入。本发明采用异步延时调用,不阻塞主线程,且对CPU资源的消耗比实时操作系统小。
技术领域
本发明涉及一种延时执行方法,尤其涉及一种基于C语言的异步延时执行方法及执行装置。
背景技术
异步延时执行,是一种对期望事件发生时间的延时和对期望事件延时发生不阻塞主线程的处理方法。
在面向对象的语言(例如C++、C#、Java等)中,可以采用多线程或异步函数实现;现有技术中,在C语言中采用实时操作系统(RealTimeOS)或采用多线程使用,但对小容量RAM和主频较低的MCU来说,存在较大的堆栈消耗,且多线程间维护成本高,反而得不偿失。
综上,有必要设计一种基于C语言的异步延时执行方法及执行装置来弥补上述缺陷。
发明内容
本发明提出一种基于C语言的异步延时执行方法及执行装置,其解决了现有技术中在C语言中采用实时操作系统使用多线程导致堆栈消耗大和多线程间维护成本高的缺陷。本发明采用异步延时调用,不阻塞主线程,且对CPU资源的消耗比实时操作系统小。
本发明的技术方案是这样实现的:
本发明公开一种基于C语言的异步延时执行装置,其包括结构体定义模块、计数驱动模块和调用模块;调用模块设有计数值模块、注入事件模块和事件标签模块,且调用模块包括异步延时调用模块和异步延时重调用模块;结构体定义模块用于对事件结构体及需要发生的事件进行定义;计数驱动模块用于采用时间单位对调用模块中发生的注入事件进行计数,且在计数过程中,对触发的事件进行队列清除,对未触发的事件进行计数累加;异步延时调用模块用于对指定的发生事件、事件异步发生的延时计数值和事件指针指向获取指定存储位置;异步延时重调用模块用于对指定的发生事件、事件异步发生的延时计数值和事件指针指向获取指定存储位置,并对同一事件标签代表的事件重新计数注入。
其中,事件结构体包括事件启动标志、事件启动计数值、事件计数值和事件指针。
其中,事件启动标志用于标记该事件是否在启动延时异步调用中。
其中,事件启动计数值用于记录事件注入时设置的延时值。
其中,事件计数值用于在计数驱动模块在每次计数时,采用自减方式进行事件异步延时触发的倒数值。
其中,事件指针用于存储异步延时触发发生的事件的方法指针。
其中,在调用一次保证执行的情况下,采用异步延时调用模块;其中异步延时调用模块的工作流程为:在对指定事件调用后,该事件开始计数,中间重复调用同事件的异步延时调用模块,该事件并不会重新计数,直到该事件达到指定计数值、触发事件发生后,才可以调用异步延时调用模块再次对事件进行调用。
其中,在调用完毕后,需根据实际情况,对将要发生的事件的执行时间进行随时修改的情况下,采用异步延时重调用模块;其中异步延时重调用模块的工作流程为:在对指定事件调用后,该事件开始计数,中间重复调用同事件的异步延时重调用模块,该事件重新计数;如果一直在该事件计数未到达前重复调用异步延时重调用模块,则该事件会一直重置计数,事件将永远不会发生。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于广州安圣信息科技有限公司,未经广州安圣信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710363591.2/2.html,转载请声明来源钻瓜专利网。