999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于DLL的高精度定時(shí)器的設(shè)計(jì)方案

2016-09-08 09:23:25林培榕林姿瓊
電子設(shè)計(jì)工程 2016年13期
關(guān)鍵詞:進(jìn)程策略功能

董 佩,林培榕,林姿瓊

(1.閩南師范大學(xué) 福建省粒計(jì)算及其應(yīng)用重點(diǎn)實(shí)驗(yàn)室,福建 漳州 363000;2.閩南師范大學(xué) 計(jì)算機(jī)學(xué)院,福建 漳州 363000)

基于DLL的高精度定時(shí)器的設(shè)計(jì)方案

董 佩1,林培榕2,林姿瓊1

(1.閩南師范大學(xué) 福建省粒計(jì)算及其應(yīng)用重點(diǎn)實(shí)驗(yàn)室,福建 漳州363000;2.閩南師范大學(xué) 計(jì)算機(jī)學(xué)院,福建 漳州363000)

定時(shí)器的使用在程序開發(fā)工作中使用廣泛,然而在動(dòng)態(tài)鏈接庫中卻沒有直接實(shí)現(xiàn)的定時(shí)器工具;為了提高開發(fā)效率,本文在分析了有關(guān)定時(shí)器技術(shù)的實(shí)現(xiàn)及動(dòng)態(tài)庫特性的基礎(chǔ)上,利用C++語言,結(jié)合策略模式的程序設(shè)計(jì)方法在動(dòng)態(tài)庫中實(shí)現(xiàn)了高精度可擴(kuò)展的定時(shí)器,并封裝成模塊提供給其它進(jìn)程調(diào)用。經(jīng)實(shí)際項(xiàng)目驗(yàn)證本方案可行,對有關(guān)定時(shí)功能的開發(fā)能提高50%的開發(fā)效率。

動(dòng)態(tài)庫;定時(shí)器;策略模式;C++

鏈接庫是將某些功能進(jìn)行封裝打包而成的模塊,然后分兩種方式供主功能程序調(diào)用。一種是靜態(tài)鏈接方式:主進(jìn)程在調(diào)用靜態(tài)鏈接庫的時(shí)候直接加載dll文件,其它進(jìn)程在調(diào)用該鏈接庫文件的時(shí)候再重新加載;另一種為動(dòng)態(tài)鏈接方式:此方式下內(nèi)存中只有鏈接庫的一份實(shí)例,在進(jìn)程需要的時(shí)候進(jìn)行動(dòng)態(tài)的加載,多個(gè)進(jìn)程在調(diào)用同一個(gè)動(dòng)態(tài)鏈接庫(DLL)時(shí)只是將DLL的地址映射到自己的進(jìn)程空間中,從而實(shí)現(xiàn)多個(gè)進(jìn)程共享了磁盤空間中的單個(gè)DLL。DLL可以大幅度的提高程序的復(fù)用度,減少程序代碼量,縮短開發(fā)周期,同樣也降低了模塊間的耦合性。當(dāng)程序需要在某個(gè)時(shí)間間隔到來時(shí)執(zhí)行特定的操作時(shí)都會(huì)用到定時(shí)器,對定時(shí)器的使用頻率較高,比如某基站定時(shí)向網(wǎng)管中心發(fā)送自己運(yùn)行狀態(tài)信息等。雖然在MFC框架利用消息響應(yīng)機(jī)制實(shí)現(xiàn)了一個(gè)定時(shí)器供開發(fā)者使用,但是卻有著優(yōu)先級別低,精度不夠,必須依賴消息響應(yīng)機(jī)制而導(dǎo)致效率低和使用范圍受限的缺點(diǎn)。將定時(shí)器功能封裝成DLL模塊并提供公共的訪問接口,可以讓進(jìn)程或線程在任何需要使用定時(shí)器的場景下調(diào)用該DLL模塊來完成相應(yīng)功能,有效避免了重復(fù)開發(fā),增加開發(fā)效率。

1 系統(tǒng)結(jié)構(gòu)

為了提高復(fù)用度,舍棄靜態(tài)鏈接方式而選用在動(dòng)態(tài)鏈接方式實(shí)現(xiàn)定時(shí)器,本方案中主進(jìn)程調(diào)用DLL來完成定時(shí)功能的總體結(jié)構(gòu)圖如圖1所示。

圖1 主進(jìn)程與DLL間的調(diào)用

當(dāng)某線程需要啟動(dòng)定時(shí)功能時(shí),調(diào)用DLL提供的訪問接口啟動(dòng)定時(shí)器,并提供該定時(shí)事件對應(yīng)的ID(整型數(shù)據(jù)標(biāo)識(shí))和定時(shí)周期等,DLL中定時(shí)功能啟動(dòng)后開始以毫秒為單位計(jì)時(shí),當(dāng)時(shí)鐘周期到來時(shí)DLL中定時(shí)器響應(yīng)部分調(diào)用主線程提供的回調(diào)接口,回調(diào)接口再調(diào)用線程中具體響應(yīng)部分,從而完成一次啟動(dòng)定時(shí)到響應(yīng)定時(shí)的過程,多個(gè)定時(shí)器用ID來進(jìn)行區(qū)分標(biāo)識(shí)。

2 關(guān)鍵技術(shù)及功能具體實(shí)現(xiàn)

2.1回調(diào)功能

回調(diào)函數(shù)通常是線程提供給DLL調(diào)用的函數(shù),也用于線程間調(diào)用,主要是用來截獲有用消息、處理一些異步事件和獲取相關(guān)系統(tǒng)信息。應(yīng)用程序?qū)⒒卣{(diào)函數(shù)的入口地址作為參數(shù)傳給DLL,然后DLL就可以通過該地址在需要的時(shí)候調(diào)用回調(diào)函數(shù)來完成某項(xiàng)功能。回調(diào)函數(shù)需要遵守規(guī)定好的傳遞方式,并且參數(shù)格式也需要嚴(yán)格的設(shè)置成一致,否則在調(diào)用DLL的時(shí)候就會(huì)發(fā)生運(yùn)行錯(cuò)誤或者是系統(tǒng)崩潰。回調(diào)機(jī)制支持自定義的調(diào)用方式,但是大多情況下回調(diào)函數(shù)采用的都是標(biāo)準(zhǔn)應(yīng)用程序接口的調(diào)用方式,也就是__stdcall。在__stdcall方式下,回調(diào)函數(shù)和大多普通函數(shù)一樣都是先將函數(shù)參數(shù)按從右到左的順序壓入臨時(shí)棧空間,然后在函數(shù)需要返回時(shí)將參數(shù)出棧,釋放內(nèi)存空間[1]。本方案中用到了兩處回調(diào)。在主進(jìn)程安插了一個(gè)回調(diào)函數(shù),在線程加載DLL文件之后就將此回調(diào)函數(shù)地址指針傳給DLL,在DLL定時(shí)成功響應(yīng)的時(shí)候可通過該函數(shù)地址調(diào)用回調(diào)函數(shù),再在回調(diào)函數(shù)中調(diào)用主線程中的定時(shí)響應(yīng)函數(shù),這樣就完成了DLL與主進(jìn)程的實(shí)時(shí)交互。第二個(gè)回調(diào)用在DLL模塊中,提供給定時(shí)組件,讓其回調(diào)一個(gè)指定函數(shù),從而在該函數(shù)可以調(diào)用定時(shí)響應(yīng)函數(shù)。

2.2策略模式

設(shè)計(jì)模式是在程序開發(fā)工作中對經(jīng)常遇到的設(shè)計(jì)問題的可再現(xiàn)的解決方案,策略模式是其中的一種,利用面向?qū)ο蟮睦^承和多態(tài)機(jī)制來定義一組算法,將每個(gè)算法都封裝起來,并且使他們之間可以互換[2]。通用類圖如圖2所示。

圖2 策略模式類圖

不同的具體策略類都需要繼承抽象的策略接口,對公共的方法接口進(jìn)行具體實(shí)現(xiàn)。在抽象使用者接口中封裝了一個(gè)指向抽象策略對象的指針,對于不同的使用者類都要繼承抽象的使用者接口,在子類的具體對象中需要選擇一個(gè)具體策略對象來對該指針進(jìn)行初始化,如此就可以通過該指針調(diào)用公共的方法讓對應(yīng)的策略得到運(yùn)行,實(shí)現(xiàn)了動(dòng)態(tài)綁定不同的策略。這種模式具有極高的可擴(kuò)展性,不管是增加或修改具體策略還是具體使用者,只需要繼承對應(yīng)的抽象類、完成相應(yīng)功能,而不會(huì)對原系統(tǒng)結(jié)構(gòu)造成大的影響。

2.3DLL中定時(shí)功能的實(shí)現(xiàn)

定時(shí)組件選用多媒體定時(shí)器(timeSetEvent),它有著定時(shí)精度高,穩(wěn)定性強(qiáng)的優(yōu)點(diǎn)[3]。對策略模式進(jìn)行改進(jìn),然后配合回調(diào)機(jī)制來實(shí)現(xiàn)整個(gè)定時(shí)流程,具體實(shí)現(xiàn)如圖3所示。

在DLL中定義了抽象的定時(shí)策略,提供了定時(shí)器開啟的函數(shù)接口,然后本方案中創(chuàng)建一個(gè)抽象定時(shí)器的實(shí)現(xiàn)類CMMTimer,完成定時(shí)器的啟動(dòng)、定時(shí)器對象(封裝了實(shí)際的定時(shí)器ID標(biāo)識(shí),需要循環(huán)的次數(shù),定時(shí)器到達(dá)的次數(shù)等參數(shù))的查找、定時(shí)功能的關(guān)閉等功能,并將啟動(dòng)的定時(shí)器對象保存到map容器中(健為定時(shí)器ID)。定義了一個(gè)抽象的定時(shí)器使用者類CtimerListener,提供定時(shí)響應(yīng)的接口函數(shù)OnMMTimer()和一個(gè)抽象策略指針。這種策略模式下當(dāng)主進(jìn)程傳來開啟定時(shí)器的需求時(shí),可根據(jù)主進(jìn)程的需要封裝不同的使用者對象,然后在該對象中選取一種定時(shí)策略 (本方案中選用基于timeSetEvent的定時(shí)策略,當(dāng)需要使用基于SetWaitableTimer方式的定時(shí)策略時(shí)只需較小的改動(dòng)就能實(shí)現(xiàn)功能擴(kuò)展)并創(chuàng)建對象來啟動(dòng)定時(shí),當(dāng)時(shí)鐘周期來到時(shí)通過在回調(diào)函數(shù)中用基類CtimerListener的指針調(diào)用OnMMTimer()的方式可以實(shí)現(xiàn)與不同使用者對象響應(yīng)函數(shù)的動(dòng)態(tài)綁定。

圖3 定時(shí)功能實(shí)現(xiàn)流程圖

3 結(jié)論

文中提供了用DLL封裝出一種高精度定時(shí)模塊的方法,能減少程序開發(fā)工作中對定時(shí)功能的重復(fù)開發(fā)。因?yàn)樵贒LL中沒有封裝好的定時(shí)工具,于是本文重點(diǎn)闡述了如何在DLL中實(shí)現(xiàn)定時(shí)功能。通過引入了策略模式的程序設(shè)計(jì)方法,支持根據(jù)不同的場景需求來添加或裁剪定時(shí)器功能,同時(shí)也支持用其他方法(如SetWaitableTimer)擴(kuò)展出其它定時(shí)器,提高了模塊的擴(kuò)展性和可維護(hù)性。通過實(shí)際項(xiàng)目的穩(wěn)定運(yùn)行驗(yàn)證了該方案的可行性。

[1]張立明.IP網(wǎng)絡(luò)業(yè)務(wù)行為分析[D].北京:北京郵電大學(xué),2008.

[2]秦小波.設(shè)計(jì)模式之禪[M].北京:機(jī)械工業(yè)出版社,2014.

[3]王鵬飛,王鵬.基于Visual C6.0的Windows應(yīng)用程序定時(shí)器研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2013,23(2):45-47.

[4]翼榮華,祁力鈞,傅澤田.基于Visual C++的精確定時(shí)技術(shù)與應(yīng)用[J].農(nóng)機(jī)化研究,2007(5):191-193.

[5]TANGang Hong-zhong,HUANG Hui-xian,YIN Lin.Applicaion of VC+DLL timer in design of industrial control software[J].Ordnance Industry Automatioin,2003,18(6):781-784.

[6]Erich Gammam,Richard Helm,Ralph Johnson,et al.Design patterns elements of reusable object-oriented software[M]. America:Pearson Education,2000:50-200.

Design scheme of High-precision timer based on DLL

DONG Pei1,LIN Pei-rong2,LIN Zi-qiong1
(1.Lab of Granular Computing,Minnan Normal University,Zhangzhou 363000,China;2.School of Computing,Minnan Normal University,Zhangzhou 363000,China)

The Timer is widely used in program development by R&D personnel.However,there was no direct way to implement the Timer in Dynamic link library.In order to improve development efficiency,this paper based on analyzing the relevant technology of Timer implementation and the property of DLL,and used C++and a programming technique of strategy Pattern to implement High-precision and expansible Timer.Meanwhile,it packaged into a module to provide other processes with calling.This program is feasible testified by the actual project,and it can improve the developing efficiency of 50%on the Timer development.

DLL;timer;strategy pattern;C++

TN929.5

A

1674-6236(2016)13-0059-02

2015-07-13稿件編號(hào):201507091

福建省教育廳項(xiàng)目(JA14194)

董 佩(1989—),女,湖北孝感人,碩士研究生。研究方向:網(wǎng)絡(luò)技術(shù)。

猜你喜歡
進(jìn)程策略功能
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
例談未知角三角函數(shù)值的求解策略
債券市場對外開放的進(jìn)程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
我說你做講策略
高中數(shù)學(xué)復(fù)習(xí)的具體策略
關(guān)于非首都功能疏解的幾點(diǎn)思考
Passage Four
中西醫(yī)結(jié)合治療甲狀腺功能亢進(jìn)癥31例
辨證施護(hù)在輕度認(rèn)知功能損害中的應(yīng)用
社會(huì)進(jìn)程中的新聞學(xué)探尋
主站蜘蛛池模板: 国产在线精品美女观看| 国产第一页屁屁影院| 日韩精品亚洲人旧成在线| 欧美一级夜夜爽www| 国产成人久久综合777777麻豆| 亚洲人网站| 久久公开视频| 精品日韩亚洲欧美高清a| 久久亚洲高清国产| 亚洲成人精品| 成人精品午夜福利在线播放| 波多野结衣中文字幕久久| 久爱午夜精品免费视频| 久久精品波多野结衣| 免费可以看的无遮挡av无码| 欧美国产日本高清不卡| 91在线激情在线观看| av午夜福利一片免费看| 91综合色区亚洲熟妇p| 欧美成人精品一级在线观看| 真实国产乱子伦高清| 亚瑟天堂久久一区二区影院| 玩两个丰满老熟女久久网| 亚洲人成成无码网WWW| 国产人成乱码视频免费观看| 国产亚洲高清在线精品99| 好紧太爽了视频免费无码| 国产女同自拍视频| 欧美不卡视频在线观看| 亚洲成A人V欧美综合| 亚洲永久免费网站| 欧美在线黄| 国产精品吹潮在线观看中文| 国产亚洲精品资源在线26u| 青青草国产一区二区三区| 国产激爽大片高清在线观看| 欧美成在线视频| 最近最新中文字幕在线第一页| 国产精品天干天干在线观看| 国产91精品最新在线播放| 免费国产小视频在线观看| 伊人蕉久影院| 黄色三级毛片网站| 免费观看男人免费桶女人视频| 毛片久久网站小视频| 亚洲天堂.com| 欧美日韩高清| 亚洲h视频在线| 18禁黄无遮挡网站| 免费网站成人亚洲| 国产91无毒不卡在线观看| 国产91色| 午夜精品一区二区蜜桃| 国产丝袜无码精品| 日本人妻一区二区三区不卡影院| 无码内射中文字幕岛国片| 狠狠色婷婷丁香综合久久韩国 | 欧美日韩国产成人高清视频| 最新无码专区超级碰碰碰| 免费在线一区| 91区国产福利在线观看午夜| 亚洲成人在线网| 成人福利在线视频| 国国产a国产片免费麻豆| 国产高颜值露脸在线观看| 亚洲日本中文字幕乱码中文| 在线欧美日韩国产| 男女精品视频| 台湾AV国片精品女同性| 亚洲精品国产成人7777| 国产高清在线丝袜精品一区| 无码乱人伦一区二区亚洲一| 免费在线色| 国产欧美又粗又猛又爽老| 二级毛片免费观看全程| 国产欧美日韩专区发布| 又猛又黄又爽无遮挡的视频网站| 久久精品无码专区免费| 中字无码精油按摩中出视频| 国产精品毛片一区视频播| 久久一色本道亚洲| 曰AV在线无码|