1. 程式人生 > >讓你提前認識軟件開發(21):C程序中的定時器

讓你提前認識軟件開發(21):C程序中的定時器

有一個 下一步 有關 作者 鬧鐘 href pop size http

版權聲明:本文為博主原創文章。對文章內容有不論什麽意見或建議。歡迎與作者單獨交流。作者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程序中的定時器