• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

      2016-09-08 09:23:25林培榕林姿瓊
      電子設(shè)計工程 2016年13期
      關(guān)鍵詞:線程調(diào)用進程

      董 佩,林培榕,林姿瓊

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

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

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

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

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

      動態(tài)庫;定時器;策略模式;C++

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

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

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

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

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

      2 關(guān)鍵技術(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就可以通過該地址在需要的時候調(diào)用回調(diào)函數(shù)來完成某項功能?;卣{(diào)函數(shù)需要遵守規(guī)定好的傳遞方式,并且參數(shù)格式也需要嚴格的設(shè)置成一致,否則在調(diào)用DLL的時候就會發(fā)生運行錯誤或者是系統(tǒng)崩潰?;卣{(diào)機制支持自定義的調(diào)用方式,但是大多情況下回調(diào)函數(shù)采用的都是標準應(yīng)用程序接口的調(diào)用方式,也就是__stdcall。在__stdcall方式下,回調(diào)函數(shù)和大多普通函數(shù)一樣都是先將函數(shù)參數(shù)按從右到左的順序壓入臨時棧空間,然后在函數(shù)需要返回時將參數(shù)出棧,釋放內(nèi)存空間[1]。本方案中用到了兩處回調(diào)。在主進程安插了一個回調(diào)函數(shù),在線程加載DLL文件之后就將此回調(diào)函數(shù)地址指針傳給DLL,在DLL定時成功響應(yīng)的時候可通過該函數(shù)地址調(diào)用回調(diào)函數(shù),再在回調(diào)函數(shù)中調(diào)用主線程中的定時響應(yīng)函數(shù),這樣就完成了DLL與主進程的實時交互。第二個回調(diào)用在DLL模塊中,提供給定時組件,讓其回調(diào)一個指定函數(shù),從而在該函數(shù)可以調(diào)用定時響應(yīng)函數(shù)。

      2.2策略模式

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

      圖2 策略模式類圖

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

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

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

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

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

      3 結(jié)論

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

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

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

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

      [4]翼榮華,祁力鈞,傅澤田.基于Visual C++的精確定時技術(shù)與應(yīng)用[J].農(nóng)機化研究,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稿件編號:201507091

      福建省教育廳項目(JA14194)

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

      猜你喜歡
      線程調(diào)用進程
      核電項目物項調(diào)用管理的應(yīng)用研究
      債券市場對外開放的進程與展望
      中國外匯(2019年20期)2019-11-25 09:54:58
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      淺談linux多線程協(xié)作
      基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
      社會進程中的新聞學(xué)探尋
      我國高等教育改革進程與反思
      Linux僵死進程的產(chǎn)生與避免
      利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
      Linux線程實現(xiàn)技術(shù)研究
      台安县| 武邑县| 轮台县| 封开县| 固安县| 阳山县| 炎陵县| 景德镇市| 镇坪县| 环江| 邯郸市| 鄂尔多斯市| 吴川市| 邻水| 青川县| 永仁县| 千阳县| 屏边| 湘西| 阿拉尔市| 田林县| 始兴县| 南城县| 安庆市| 车险| 盐津县| 错那县| 新化县| 吴江市| 喀喇沁旗| 疏附县| 榆社县| 贡嘎县| 望江县| 大庆市| 通辽市| 宿松县| 沙洋县| 崇义县| 贡嘎县| 斗六市|