亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        董 佩,林培榕,林姿瓊

        (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ù)按從右到左的順序壓入臨時??臻g,然后在函數(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ù)。

        猜你喜歡
        進程策略功能
        也談詩的“功能”
        中華詩詞(2022年6期)2022-12-31 06:41:24
        例談未知角三角函數(shù)值的求解策略
        債券市場對外開放的進程與展望
        中國外匯(2019年20期)2019-11-25 09:54:58
        我說你做講策略
        高中數(shù)學(xué)復(fù)習(xí)的具體策略
        關(guān)于非首都功能疏解的幾點思考
        Passage Four
        中西醫(yī)結(jié)合治療甲狀腺功能亢進癥31例
        辨證施護在輕度認知功能損害中的應(yīng)用
        社會進程中的新聞學(xué)探尋
        国产亚洲精品在线播放| 一二三四在线视频社区3| 男人添女人下部高潮全视频| 亚州少妇无套内射激情视频| 精品中文字幕久久久人妻| 人妻精品一区二区免费| 中文字幕久区久久中文字幕| 亚洲精品中文字幕91| 亚洲综合日韩一二三区| 国产亚洲精品精品精品| 国产黑色丝袜在线观看下| 日本久久久免费高清| 在线观看免费的黄片小视频| 久久久久人妻精品一区二区三区| 午夜精品久久久久久久无码| 正在播放东北夫妻内射| 亚洲久无码中文字幕热| 日韩成精品视频在线观看| 久久亚洲免费精品视频| 在线人成视频播放午夜| 国产精品爽黄69天堂a| 国产亚洲精品A在线无码| 国产不卡一区二区av| 白色月光免费观看完整版| 成 人色 网 站 欧美大片在线观看 | 伊人精品成人久久综合97| 又大又粗欧美黑人aaaaa片| 人人澡人人澡人人看添av| 黑人巨大videos极度另类| 欧美成人精品福利在线视频| 国产女主播福利在线观看| 午夜精品久久久久久久99热| 少妇的丰满3中文字幕| 亚洲免费成年女性毛视频| 亚洲高清在线天堂精品| 久久不见久久见免费影院国语| 国产影片中文字幕| 国产精品无码片在线观看| 91国产超碰在线观看| 少妇一级淫片中文字幕| 一本久久a久久精品vr综合 |