Welcome

首页 / 软件开发 / 数据结构与算法 / 提前认识软件开发(21) C程序中的定时器

提前认识软件开发(21) C程序中的定时器2015-01-25在实际的C程序中,一个模块执行多个操作是很常见的事情。如果多个操作同时进行,会出现程序效率低下、计算机CPU占用率过高等情况,这时就需要对所有操作的执行顺序作一个合理的安排,这就涉及到定时器的使用。

本文对C程序中的定时器的类型、设置和清除方法等作了详细的介绍,为相关开发工作的开展提供了参考。

一、定时器的定义及分类

我们所熟悉的定时器是一个多任务定时提醒的软件,安装于电脑或手机上。举个例子,我们经常用的闹钟其实就是定时器,它会在我们设定的时间运行某种程序,在其它时间则处于休眠状态。

那么什么是C程序中的定时器呢?C程序中的定时器是程序员编写的用于定时执行某种操作的程序,是相关C代码的集合。这个定时器是“幕后的英雄”,我们能够看到的是软件所体现出来的某项功能,而看不见的是定时器所起的作用。

根据所起的作用的不同,C程序中的定时器分为如下两类:

第一类,在多个操作中设定不同操作执行顺序的定时器。在一个很大的软件模块中,同时进行多个操作会降低程序的执行效率,合理地使用定时器能够让某些操作避开程序执行的“高峰期”,达到舒缓程序执行压力的作用。这时的定时器所起的作用和在上下班时间十字路口的红绿灯的作用类似。

第二类,用于限制某种操作的执行时间,若在规定时间内没有执行该操作则作超时处理的定时器。这类定时器多用于需要和其它模块进行通信的模块中。如果一个模块向其它模块发了一个很重要的消息,需要等到其它模块答复后才能进行下一步的操作,那么定时器就在这个时候派上用场了。可以在定时器中设定本模块所能“容忍”的其它模块最迟应答的时间,如果超过了这个时间,则认为对方无应答,直接进行后续操作。

在C程序中,合理利用定时器,可提高程序的执行效率,同时可让程序体现出逻辑层次感和严密性。

二、定时器的数据结构

为了完成功能,一个典型的定时器的数据结构如下:

// 先重定义基本数据类型typedef unsigned charUINT8;typedef unsigned short intUINT16;typedef unsigned int UINT32; // 定时器的数据结构typedef struct{…………UINT8 iUseFlag;// 该定时器是否正在使用UINT8 iArrivedFlag; // 使用该定时器的时间是否已到UINT8 iTimerType; // 该定时器的类型UINT16iModuleNo; // 使用该定时器的模块号/进程号等信息UINT32iSetTime;// 设定该定时器的启动时间, 即相对此刻, 该定时器在多长时间之后启动UINT8 iTimerNo;// 该定时器的编号UINT8 iQue;// 该定时器的存放队列UINT16iQuePrev;// 该定时器的存放位置的前一个结点UINT16iQueNext;// 该定时器的存放位置的后一个结点…………} TimerStruc_T;
一个定时器结构体所包含的字段根据不同软件产品和项目组的要求而略有区别,但如上面结构体中罗列出来的字段都是需要的。字段的含义见对应字段后面的注释。