版权声明:本文为博主原创文章。对文章内容有不论什么意见或建议。欢迎与作者单独交流。作者QQ(微信):245924426。 https://blog.csdn.net/zhouzxi/article/details/25834761

第1部分 又一次认识C语言

C程序中的定时器

 

【文章摘要

        在实际的C程序中,一个模块运行多个操作是非经常见的事情。假设多个操作同一时候进行,会出现程序效率低下、计算机CPU占用率过高等情况,这时就须要对全部操作的运行顺序作一个合理的安排,这就涉及到定时器的使用。

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

【关键词

        C程序  定时器  操作  开发

 

一、定时器的定义及分类

        我们所熟悉的定时器是一个多任务定时提醒的软件,安装于电脑或手机上。

举个样例,我们经经常使用的闹钟事实上就是定时器。它会在我们设定的时间运行某种程序,在其他时间则处于休眠状态。

        那么什么是C程序中的定时器呢?C程序中的定时器是程序猿编写的用于定时运行某种操作的程序。是相关C代码的集合。

这个定时器是“幕后的英雄”。我们可以看到的是软件所体现出来的某项功能,而看不见的是定时器所起的作用。

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

        第一类,在多个操作中设定不同操作运行顺序的定时器。在一个非常大的软件模块中。同一时候进行多个操作会减少程序的运行效率,合理地使用定时器可以让某些操作避开程序运行的“高峰期”,达到舒缓程序运行压力的作用。

这时的定时器所起的作用和在上下班时间十字路口的红绿灯的作用相似。

        第二类,用于限制某种操作的运行时间。若在规定时间内没有运行该操作则作超时处理的定时器。这类定时器多用于须要和其他模块进行通信的模块中。

假设一个模块向其他模块发了一个非常重要的消息。须要等到其他模块答复后才干进行下一步的操作,那么定时器就在这个时候派上用场了。

可以在定时器中设定本模块所能“容忍”的其他模块最迟应答的时间。假设超过了这个时间。则觉得对方无应答。直接进行兴许操作。

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

 

二、定时器的数据结构

       为了完毕功能。一个典型的定时器的数据结构例如以下:

// 先重定义基本数据类型

typedef unsigned char        UINT8;

typedef unsigned short int  UINT16;

typedef unsigned int           UINT32;

 

// 定时器的数据结构

typedef struct

{

    ……

    ……

    UINT8   iUseFlag;            // 该定时器是否正在使用

    UINT8   iArrivedFlag;       // 使用该定时器的时间是否已到

    UINT8   iTimerType;         // 该定时器的类型

    UINT16  iModuleNo;         // 使用该定时器的模块号/进程号等信息

    UINT32  iSetTime;            // 设定该定时器的启动时间, 即相对此刻, 该定时器在多长时间之后启动

    UINT8   iTimerNo;            // 该定时器的编号

    UINT8   iQue;                  // 该定时器的存放队列

    UINT16  iQuePrev;          // 该定时器的存放位置的前一个结点

    UINT16  iQueNext;          // 该定时器的存放位置的后一个结点

    ……

    ……

} TimerStruc_T;

 

        一个定时器结构体所包括的字段依据不同软件产品和项目组的要求而略有差别,但如上面结构体中罗列出来的字段都是须要的。

字段的含义见相应字段后面的凝视。

 

三、怎样设置和清除定时器

3.1 设置定时器的流程

        在实际的软件开发项目中,一般将设置定时器的流程封装为函数。在须要设置定时器的时候,仅仅须要调用该函数就可以。

        设置定时器的流程如图1所看到的。

图1 设置定时器的流程

 

        有关此流程的说明例如以下:

        (1) 在设置定时器之前。先要推断该定时器是否正在使用。

假设在使用中,那么要先清除定时器以释放资源。这是为了防止一个定时器有多种用途的情况。

        (2) 在获取定时器存放资源之前,要对初始化及信息入队操作进行加锁处理。为了防止相同的资源被多个定时器获得。

 

3.2 清除定时器的流程

        清除定时器的操作相同会被封装为函数。

在须要清除定时器的时候,仅仅须要调用该函数就可以。

        清除定时器的流程如图2所看到的。

图2 清除定时器的流程

 

        有关此流程的说明例如以下:

        (1) 在清除定时器之前。先要推断该定时器是否正在使用及清除时间是否达到。假设两者中有一个不满足,则不用清除定时器。

        (2) 在清除定时器相关信息之前,为了保持操作的唯一性。相同要进行加锁处理。

 

四、总结

        随着程序功能的日益完好和丰富。不同操作运行顺序越发显得重要。这就为定时器提供了施展才干的“舞台”。

        本文以作者的实际项目开发工作为背景,对C程序中的定时器的类型、设置和清除方法等作了具体的描写叙述,为相关模块的设计和程序的编写提供了故意的參考。

 

 

 

(欢迎訪问南邮BBS:http://bbs.njupt.edu.cn/)
(欢迎訪问重邮BBS:http://bbs.cqupt.edu.cn/nForum/index)

(本系列文章每周更新两篇。敬请期待!本人微博:

topnav=1&wvr=5" rel="nofollow">http://weibo.com/zhouzxi?

topnav=1&wvr=5,微信号:245924426,欢迎关注!)

让你提前认识软件开发(21):C程序中的定时器的更多相关文章

  1. 让你提前认识软件开发(23):怎样在C语言中运行shell命令?

    第1部分 又一次认识C语言 怎样在C语言中运行shell命令? [文章摘要] Linux操作系统具备开源等诸多优秀特性,因此在很多通信类软件(主流开发语言为C语言)中,开发平台都迁移到了Linux上, ...

  2. 让你提前认识软件开发(19):C语言中的协议及单元測试演示样例

    第1部分 又一次认识C语言 C语言中的协议及单元測试演示样例 [文章摘要] 在实际的软件开发项目中.常常要实现多个模块之间的通信.这就须要大家约定好相互之间的通信协议,各自依照协议来收发和解析消息. ...

  3. 开发微信小程序中SSL协议的申请、证书绑定、TLS 版本处理等

    在上篇随笔<基于微信小程序的系统开发准备工作>介绍了开发微信小程序的一些前期的架构设计.技术路线 .工具准备等方面内容,本篇随笔继续这个步骤,逐步介绍我们实际开发过程中对SSL协议的申请及 ...

  4. 让你提前认识软件开发(17):makefile文件的书写及应用

    第1部分 又一次认识C语言 makefile文件的书写及应用 [文章摘要] makefile用于Linux下整个project的编译.对于Linux下的C/C++语言的编译是至关重要的. 本文以实际的 ...

  5. 让你提前认识软件开发(31):数据库脚本中的begin与end

    版权声明:本文为博主原创文章.对文章内容有不论什么意见或建议,欢迎与作者单独交流.作者QQ(微信):245924426. https://blog.csdn.net/zhouzxi/article/d ...

  6. 让你提前认识软件开发(35):怎样改动SQL脚本以完毕需求?

    第2部分 数据库SQL语言 怎样改动SQL脚本以完毕需求? SQL脚本的改动和C语言代码的改动流程是一样的,都要遵循下面步骤:         第一步,阅读需求.弄清楚自己要完毕什么功能.       ...

  7. 开发微信小程序 中遇到的坑 及解决方法

    1.wx.request 只能访问 https 解决: 新建项目  不填appid  即可访问 localhost 2.页面中多重三元表达式  解析有问题 解决: <!--{{index}} { ...

  8. 软件开发V型号

    RAD(rap application development),就是软件开发过程中的一个重要模型,称为高速应用开发模型.其模型构图形似字母V,所以又称V模型.      他通过开发和測试同一时候进行 ...

  9. [No0000138]软件开发基础知识

    1. 本文目的 本文目的在于,介绍软件开发的各种基础知识 以实现,看了之后,对于软件开发的很多领域的基础知识有所了解 如此在进行后续的真正的软件开发时,遇到各种细节知识,才会明白由来和背景知识 第 1 ...

随机推荐

  1. 详解MySQL基准测试和sysbench工具(转)

    前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处, ...

  2. spring boot @ResponseBody转换JSON 时 Date 类型处理方法,Jackson和FastJson两种方式,springboot 2.0.9配置fastjson不生效官方解决办法

    spring boot @ResponseBody转换JSON 时 Date 类型处理方法 ,这里一共有两种不同解析方式(Jackson和FastJson两种方式,springboot我用的1.x的版 ...

  3. Java学习笔记之——枚举类

    枚举可以限定类的值只是有限个,例如:星期,只有星期一到星期天 语法案例:

  4. java过滤器(过滤器排序)

    java过滤器(过滤器排序) 定义过滤器顺序是很简单的:匹配请求的过滤器将按照它们出现在部署描述符或者编程式配置中的顺序添加到过滤器链中(记住,如果同时再部署描述符或者编程式配置中设置了一些过滤器,那 ...

  5. 如何让gitbook与github仓库关联

    一.账号注册 分别https://legacy.gitbook.com/login和https://github.com/注册账号. https://legacy.gitbook.com/login登 ...

  6. Web Worker 初探

    什么是Web Worker? Web Worker 是Html5 提出的能够在后台运行javascript的对象,独立于其他脚本,不会影响页面的性能,也不会影响你继续对于页面进行操作.通俗点讲,就是后 ...

  7. windows for windows:下载、安装

    关于docker的下载:同学们不要再网上找来找去了,直接去到阿里云下载客户端,配置阿里的国内镜像地址就好~ 申请一个阿里云的账号,然后: tips:如果使用虚拟机的os 是windows 那么很抱歉, ...

  8. file上传图片,base64转换、压缩图片、预览图片、将图片旋转到正确的角度

    /** * 将base64转换为文件对象 * (即用文件上传输入框上传文件得到的对象) * @param {String} base64 base64字符串 */ function convertBa ...

  9. html之CSS样式学习笔记

    本文内容: 字体样式 文本样式 背景样式 尺寸样式 盒子模型 边框样式 边距样式 浮动布局 定位布局 [CSS3]伸缩布局 标签显示方式 列表样式 [CSS3]过渡样式 [CSS3]变换样式之2D变形 ...

  10. perfect-scrollbar在vue中的使用

    1.下载perfect-scrollbar依赖包 npm install perfect-scrollbar 2.perfect-scrollbar特性 1)直接下载依赖包及包含css样式和js 2) ...