您的当前位置:首页正文

采用定时器复用技术实现异步处理的方法

来源:榕意旅游网
第28卷第3期 郑州铁路职业技术学院学报 Journal of Zhengzhou Railway Vocational and Technical College Vo1.28 No.3 Sept.2016 2016年9月 采用定时器复用技术实现异步处理的方法 司智勇 ,张鹏 ,张杰 450000) (1.郑州铁路职业技术学院,河南郑州450052;2.中铁七局郑州工程有限公司,河南郑州摘一要:在多任务、多线程环境下,设计有时间间隔的任务序列需要利用定时器进行编程。提出了使用单 定时器控件实现异步处理任务序列以及复杂的嵌套定时任务的算法,并且给出了通用的程序原理图。该算 法占用设备资源少,具有较高的可靠性,易于维护。 关键词:异步处理;任务序列;定时器;控件复用 中图分类号:TP301.6 文献标志码:A 文章编号:1008—6811(2016)03—0012—03 Method for Realizing Asynchr0n0us Processing by Using Timer Multiplexing Technology sI Zhiyong ,ZHANG Peng ,ZHANG Jie ((1.Zhengzhou Railway Vocational and Technical College,Zhengzhou 450052,China; 2.Zhengzhou Engineering Corporation Limited of China Railway 7th Bureau,Zhengzhou 450000,China) Abstract:In the multi task and multi thread environment,the design of time interval of the task sequence needs to use the timer programming.This paper proposes an algorithm that uses a single timer control to implement asyn— chronous processing tasks and complex nested timing tasks.This algorithm occupies less equipment resources,has high reliability.easy to maintain. Key words:asynchronous processing;task sequence;timer;control muhiplexing 在多任务、多线程的编程环境下,采用面向对象 的程序设计方法解决问题已经越来越普遍。在程序 运行中追求速度快、效率高的同时,很多情况下会设 计一定的延时解决某些应用需要,或者更可靠地实 收稿日期:2016.03.03 作者简介:司智勇(1969一),男,河南新郑人,郑州铁路职业技术学院网络信息技术中心讲师,硕士,研究方向为计算机技术、 网络应用。 张鹏(1981一),男,河南郑州人,郑州铁路职业技术学院网络信息技术中心助教,研究方向为计算机技术、网络 安全。 张杰(1978一),男,河南滑县人,中铁七局集团郑州工程有限公司工程师,研究方向为工程技术。 12 现需要异步处理的任务序列。使用单定时器解决单 任务,算法比较简单。解决多定时任务时很容易理 解的方法是使用多个定时器,但是随着定时器的增 多,系统资源占用率也会随之提高,并且管理及维护 的难度也会随之增加。那么,是否可以利用定时器 控件复用的技术来解决多定时任务序列以及嵌套定 时任务呢?实践表明,这种算法提高了资源利用率, 程序实现简洁可靠。 1定时器控件的工作方法 几乎所有的面向对象的程序设计环境下,都 提供了定时器控件。定时器的用法很简单,先设 置时间数作为时间间隔,一般情况下为毫秒级。 当该定时器被激活后,通常情况下置使能属性为 真时,开始倒计时,到达设置时间间隔后,系统会 触发定时器事件继而完成事先设计的操作任务。 同时在默认情况下,定时器会自动恢复所设置的 时间间隔,开始下一次循环操作。若不想循环作 用,可以设置该定时器休眠,使能属性为假或修改 时间间隔为0即可。 2异步处理多任务的完整实现 2.1 单一定时器异步处理不同时间间隔的并行任 务序列 从上述的定时器的工作方法来看,一个定时器 处理一个任务是非常容易实现的。但如果仅采用单 一的定时器来实现多种定时任务,就需要增加一些 机制来完成。下面我们以一个不同时间间隔的并行 任务列表来说明,任务描述如下: 时间间隔a,任务a;时间间隔b,任务b;..…・时 间间隔X,任务X。这些任务不分先后,可以多次执 行,不需要循环执行。 实现以上任务,增加 个任务标记来区分不同 的任务是解决这个问题的核心。因此,可以设置一 个全局变量TaskMark,类型采用字符型,易读性较 好。这样,对不同的任务设置不同的标记,在定时中 断时,根据不同的标记,采取相应的操作,处理不同 的任务。任务并行存在,处理任务时根据需要,不分 先后。算法原理图见图1。 调用定时器 定时器事件 设置TaskMark 为a或b或…X 设置对应的 时间间隔 激活定时器 图1 单一定时器实现并行任务 从原理图可以看出,我们在程序设计时,可根据 实际需要随时调用同一定时器实现不同的任务,能 够实现重复调用,由于是并行设计,也可以实现交叉 调用。 2.2单一定时器异步处理不同时间间隔的串行任 务序列 采用同样的机制,单一定时器也可以实现不同 时间间隔的串行任务序列,任务描述如下: 任务0,时间间隔1;任务1,时间间隔2;任务2 ……时间间隔n;任务n。这些任务需要按照先后顺 序严格地执行,可以多次执行,不需要循环执行。 实现以上序列任务,除了采用全局变量Task. Mark以外,还需要在每个任务完成后重置任务标记 及时间间隔,立即调用定时器以完成下一任务,直至 最后一个任务完成为止,休眠该定时器即可。算法 原理图见图2。 调用定时器 任务0 设置TaskMark为任务1 设置时间间隔1 激活定时器 定时器事件 匹配TaskMark 任务1 任务2 任务n 设置 设置 TaskMark 休眠 为任务2 为任务TaskMark …n 定时器 设置 设置 时间间隔2 时间间隔…n 图2单一定时器实现串行任务 任务1、2、……、n是需要连续完成的,中间加上 1 短暂的停顿是为了保障每个任务的先后顺序执行的 可靠性。目前流行的操作系统均为多任务、多线程 的平台,为了提高速度,系统自有一套任务调度分析 执行机制,没有设计时的干预,程序运行时会造成任 务执行乱序,不能达到理想的运行效果。从原理图 可以看出,采用定时器复用技术,用单一的定时器消 耗很少的系统资源就能解决这一问题。若将每个时 间间隔参数设置为极小(实践证明,10 ms就可以达 到目的),基本上感觉不到程序执行的延时,然而却 极大地保障了程序执行的可控性。 2.3单一定时器实现嵌套定时任务 程序设计时,有时难免会需要定时地、反复地、 周期性地执行一些任务,这样的周期任务是否也能 嵌套在同一个定时器事件内呢?答案是肯定的,将 上述原理图中的休眠定时器模块局部替换为周期任 务即可实现嵌套,下面给出替换原理图,见图3。 休眠定时器替换 定时器事件增加 图3单一定时器实现嵌套任务 应该注意的是,定时器控件提供的时间间隔都 有最大值,若想设置更大范围的时间间隔,需要另外 指定全局变量Tms,这是一个整数类型,启用时可设 初值为0,每次定时器事件控制其增加1,指定截止 条件即可完成in倍于标准定时器时间间隔的延时。 下面是实现超长时间间隔的周期任务原理图,见 图4。 周期任务 匹配Tms=m Tms=0 TmS+l 执行周期任务 图4单一定时器实现超长定时 2.4单一定时器实现混合任务 程序设计时,往往是多类型定时任务混合存在, 其复杂性不言而喻。然而,经过前述的单类型任务 分解处理,对综合的复杂任务完成起来也就顺理成 章,有章可循了。我们针对前述原理图根据实际需 要进行对应的叠加、嵌套、替换和合并,可以形成复 用单一定时器来处理混合任务的原理图,下面仅给 出定时器事件部分,见图5。 定时器事件 匹配TaskMark 任务1 任务2 任 任 任 务 务 务 任 务 匹配 n a b x Tm8=m 设置 设置 TaskMark raskMark TIns 为任务2 为任务 =O T…n ms +l 设置时 设置时间 设周期任务TaskMark 周期 间间隔2 间隔…n 设置对应的时间间隔 任务 图5 单一定时器实现混合任务 3定时器复用技术的局限性 本研究虽然详尽阐述了使用单一定时器复用技 术完成各种类型定时任务的方法,也给出了复杂的 混合任务的解决方案,但有一点是不能忽略的:当有 需求为两个及以上的定时任务以不同的时间间隔同 时进行时,通常情况下采用单一定时器解决起来比 较复杂,可靠性会降低,要视具体情况再具体分析, 这也是本研究的局限性所在。 参考文献 [1]孔庆彦,韩雪娜,张辉.VisualBasic程序设计与应用[M]. 北京:中国铁道出版社。2015. [2][美]BenKlemens著,赵铁成,徐波,译.C程序设计新思 维[M].北京:人民邮电出版社,2015. [3]姚崇华,姜新红,程凌宇,等.多线程应用中的定时器管理 算法,计算机工程,2010,36(2):75-77. [责任编辑:赵伟] 

因篇幅问题不能全部显示,请点此查看更多更全内容