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é)探尋
主站蜘蛛池模板: 欧美在线视频不卡| 91精品福利自产拍在线观看| 欧美一级黄片一区2区| 国产精品一线天| 亚洲精品日产精品乱码不卡| 日韩精品无码免费一区二区三区| 亚洲成a人片77777在线播放| 国产亚洲精品自在久久不卡| 国产精品吹潮在线观看中文| 欧美激情成人网| 专干老肥熟女视频网站| 久久91精品牛牛| 欧美亚洲网| 欧美精品另类| 黄色网站不卡无码| 高清色本在线www| 国产99在线| 国产va欧美va在线观看| 国产99免费视频| 国产色爱av资源综合区| 麻豆AV网站免费进入| 亚洲精品免费网站| 国产精品永久免费嫩草研究院| 欧美成人综合在线| 91久久偷偷做嫩草影院电| 久久99久久无码毛片一区二区| 亚洲人成网7777777国产| 亚洲码一区二区三区| 思思热在线视频精品| 国产情精品嫩草影院88av| 亚洲国产精品VA在线看黑人| 亚洲一区色| 在线五月婷婷| 影音先锋丝袜制服| 国内精自视频品线一二区| a天堂视频在线| 99re在线视频观看| 中文字幕无码制服中字| 天天综合网色中文字幕| 波多野结衣一区二区三视频| 国内精品久久久久久久久久影视| 成人噜噜噜视频在线观看| 国产无码网站在线观看| 99精品一区二区免费视频| 国产h视频在线观看视频| 亚洲成a人片| 日韩天堂网| 制服丝袜一区二区三区在线| 成人一级免费视频| 日本免费一区视频| 国产三区二区| 2020国产精品视频| 多人乱p欧美在线观看| 伊人久久婷婷五月综合97色| 国产午夜无码片在线观看网站| 蜜桃视频一区| 波多野结衣一级毛片| 亚洲品质国产精品无码| 又爽又大又黄a级毛片在线视频| 日韩视频精品在线| 色天天综合久久久久综合片| 久久综合九九亚洲一区 | 亚洲欧美日韩成人在线| 国产成人高清精品免费5388| 手机精品视频在线观看免费| 日本三级欧美三级| 日韩无码视频专区| 2019年国产精品自拍不卡| 国产亚洲视频中文字幕视频| 亚洲国产综合精品一区| 国产亚洲高清在线精品99| 亚洲成人网在线播放| www.99精品视频在线播放| 国产在线自在拍91精品黑人| 亚洲综合九九| 欧美成人影院亚洲综合图| 亚洲a级毛片| 真实国产乱子伦视频| 亚洲人成色在线观看| 五月婷婷伊人网| 久久永久精品免费视频| 欧美成人看片一区二区三区|