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

基于VC++的定時器的使用與比較

2018-01-17 12:33:45賈耀輝
電子技術與軟件工程 2017年22期

實時數據的發送常采用軟件定時器的方法來實現。在VC++6.0的環境下,分別采用WM_TIMER定時器,多媒體定時器以及通過利用系統計數器三種途徑,完成實時數據的發送,比較其在實現方法,優先級,定時精度以及穩定性等方面的差別。通過比較得到:在多線程,多任務的數據發送過程中或穩定性較高,周期較短情況下,采用多媒體定時器可以獲得較高的定時精度,最小可達到1ms。

【關鍵詞】定時器 數據發送 穩定性 定時精度

1 引言

通過相關的資料和在實際系統中的使用發現,在VC+ + 6. 0 環境下,實時數據發送采用不同的軟件定時器,在發送頻率較慢的情況下,不同定時器的定時精度差別不大,當發送頻率變快,不同定時器的定時精度差別較大,尤其是在測控程序在完成多線程的任務時,這種差別會更加明顯。本文通過對3 種軟件定時器的實際使用的比較,研究和討論了WM_ TIMER ,多媒體定時器以及通過利用系統計數器這三 種實現定時的方法和定時精度的比較。

2 三種定時方法的比較

2.1 WM_ TIMER 定時器的實現

WM_ TIMER 是由VC+ + 提供的一種比較常用的定時器,它是系統定時器。它的實現原理是采用Set Timer () 函數進行初始化,Kill Timer ( ) 函數關閉定時器,用戶定時向消息隊列發送并在WM_ TIMER 響應函數中實現信號的

定時采集。Set Timer () 函數的聲明如下:

UINT_PTR Set Timer (

UINI_PTR nIDEvent ,

UINT nElap se ,

Void ( CALLBACK * lpfnTimer ) HWND , UINT , UINT _

PTR ,DWORD)

) ;

WM_ TIMER消息1秒之內最多可以打斷18.2次,也就是說最少可以55毫秒取一次數據,它是一個低優先級的消息,當消息隊列中有多個WM_ TIMER消息時,系統要進行消息合并。在實際的應用中需要一個WM_ TIMER消息進行定時對對話框進行刷屏,所以不能用另一個WM_ TIMER消息進行數據的發送。

2.2 多媒體定時器的實現

多媒體定時器是由Windows 系統提供的多媒體定時器資源。他的實現步驟是設置多媒體定時器參數,應用程序可調用timeGetDevCaps () 函數來確定定時器服務所支持的最小和最大精度;啟動定時器,在事件中展開各種應用,如數據采集等;刪除定時器釋放系統資源。常用的一些函數和表示意義如下:

timeBeginPeriod( ) 設置最小定時器分辨率;

timeEndPeriod( ) 清除上一個函數建立的最小定時器

分辨率;

timeSet Event ( ) 產生一個在指定時間周期內執行的

定時器時間;

timeKillEvent ( ) 刪除前面設定的定時器事件;

多媒體定時器的接口函數包含于mmsystem. dll 的動態鏈接庫中,VC+ + 提供響應的頭文件。多媒體定時器具體的實現方法是:

2.2.1 設置定時器分辨率:對定時器的參數進行設置

MMRESUL T timeGetDevCaps ( lp TIMECAPS &ptc ,UINTcbtc)

調用timeGetDevCaps 函數來判斷定時器最大和最小的分辨率,然后調用timeBeginPeriod (UINTuPeriod) 來設定定時器的分辨率,參數UINTuPeriod 為定時器分辨率的值。

2.2.2 設定定時器的觸發事件

MMRESUL TtimeSet Event (UINT uDelay ,

/ / uDlelay :采樣的事件間隔

UINT uResolution ,

/ / uResolution :時間精度,缺省默認為1 ms

L PTIMECALLBACK lp TimeProc ,

/ / lp TimeProc :用戶定義的回調函數

DWORD dwUser , UINT fuEvent) ;

/ / dwUser :用戶提供的回調函數

/ / UINT fuEvent :事件觸發方式,采用TIMEPERIODIC 為每隔一定時間觸發一次

2.2.3 聲明一個全局回調函數

void CALLBACK TimerCallBackProc ( UINT wTimer ID ,UINT mMsg ,DWORD dwUser ,DWORD dw1 ,DWORD dw2)

其中,wTimer ID 是定時器標識;mMsg 保留; dwUser用戶使用參;dw1 ,dw2 保留。

2.2.4 自定義消息處理函數: 用來接受多媒體定時器的事件通知

多媒體定時器服務使應用程序可以調度時間周期或一次中斷事件。它與消息序列傳遞WM—TIMER 消息的定時器服務不一樣。它提供硬件中斷服務;它不傳送任何消息,而是調用回調函數;定時器中斷服務提供了改善了的分辨率和精度(基于Intel 系統的精度是:最多16 毫秒,基于MIPS 系統的精度最多10 毫秒)。

2.3 利用系統計數器實現定時

(1)利用系統計數器可以實現0.1ms的定時。在窗口初始化的函數OnInitDlg()中寫如下程序:

#include window.h #include kernel132.libendprint

Typedef union _LARGE_INTEGER

{

Struct{

DWORD LowPart;

LONG HighPart;

}

LONG QuadPart;

} LARGE_INTEGER

測試

LARGE_INTEGER PT_litmp;

LONGLONG PT_QPart1, PT_QPart2;

Double PT_dfMinus, PT_dfFreq, PT_dfTim;

QueryPerformanceFrequency(&PT_litmp);

PT_dfFreq=(double)PT_litmp.QuadPart;

QueryPerformanceCounter(&PT_litmp);

PT_QPart1= PT_litmp.QuadPart;

for(i=0;i

QueryPerformanceCounter(&PT_litmp);

PT_QPart2= PT_litmp.QuadPart;

PT_dfMinus=(double)(PT_QPart2-PT_QPart1);

PT_dfTim= PT_dfMinus/ PT_dfFreq;

PT_dfTim*=1000;

PT_dfTim*=1000000;

(2)在窗口定時刷新函數OnTimer()中

Sprintf(buf, "%5.2f", PT_dfTim);

m_us=buf;

(3)測試結果如下

當計數值numble為1000時,得到的定時時間為0.00623ms;

當計數值numble為10000時,得到的定時時間為0.057ms;

當計數值numble為100000時,得到的定時時間為0. 57ms;

當計數值numble為1000000時,得到的定時時間為5.84ms;

當計數值numble為10000000時,得到的定時時間為57.03ms;

因為計數值與時間值不是線形的比例關系,所以當我們需要一個準確的時間,如2.5 ms時,一般很難確定numble值。

3 討論與結論

WM_ TIMER定時器在Windows中的最大缺點是計時器的最大分辨率是55ms,就是說應用程序每秒最多能接收到18個消息。從系統響應的優先權來說,Windows 是一個消息驅動的非搶先優先式的多任務操作系統,消息隊列中總有大量的消息在等待處理;而WM_ TIMER是一個優先級很低的消息,只有當所有消息(除消息WM_ PAINT) 被處理后才能被響應,而不能立即被系統響應,并且當消息隊列中有多個WM_ TIMER 消息時,系統要進行消息合并,因此定時精度并不高。

從運行基理來看,多媒體定時器提供的是硬件中斷服務,不傳送任何消息,優先級很高多媒體定時器使用自己獨立的線程,調用回調函數,這種定時器的中斷服務可以提供基于Intel系統的精度最多為16ms,最小定時精度可達1ms。

利用系統計數器進行定時,雖然可以達到微秒級,但是因計數值與時間值不是線形的比例關系,所以當我們需要一個準確的時間,如2.5ms,一般很難確定計數值。

參考文獻

[1]李凈,楊俊武,錢旭.用多媒體定時器精確控制采樣頻率[J].計算機應用,2000,12(12):67268.

[2]鄭存紅,胡榮強,趙瑞峰.用VC實現實時數據采集[J].計算機應用研究,2002,21(04):1032108.

[3]于勇,雷志勇.Windows下實時測控系統的實現[J].現代電子技術,2005,28(05):22223.

[4]王偉,徐國華.多媒體定時器在工業控制中的應用[J].微型機與應用,2001(12):8210.

作者簡介

賈耀輝(1983-),男,2010年畢業于重慶大學,工程師,主要從事發射裝置隨動控制技術研究工作。

作者單位

中國船舶重工集團公司第七一三研究所 河南省鄭州市 450015

主站蜘蛛池模板: 国产JIZzJIzz视频全部免费| 欧美成a人片在线观看| 日韩黄色精品| www.91中文字幕| 少妇精品网站| 手机永久AV在线播放| 日本91在线| 沈阳少妇高潮在线| 日韩国产一区二区三区无码| 亚洲一区无码在线| 国产日韩精品欧美一区喷| 伊人成人在线| 精品一区二区三区四区五区| 成人自拍视频在线观看| 国产xx在线观看| 日韩精品亚洲精品第一页| 制服丝袜在线视频香蕉| 色AV色 综合网站| 免费无码AV片在线观看国产| 久久久久免费看成人影片| 亚洲欧美日韩天堂| 亚洲成人77777| 久久超级碰| 日本一区中文字幕最新在线| 东京热高清无码精品| 亚洲清纯自偷自拍另类专区| 亚洲第一极品精品无码| 狠狠做深爱婷婷久久一区| 中文字幕有乳无码| 青青青国产视频| 五月婷婷综合网| 经典三级久久| 色综合久久久久8天国| 欧美日韩在线成人| 一级爱做片免费观看久久| 中文字幕 91| 久久久噜噜噜久久中文字幕色伊伊| 91欧美在线| 亚洲第一成人在线| 中文字幕首页系列人妻| 99久久国产综合精品2020| 黄片在线永久| 国产综合色在线视频播放线视| 久久精品视频一| 色亚洲成人| 欧美日韩激情| 热99精品视频| 免费全部高H视频无码无遮掩| 精品91视频| 99视频在线免费观看| 亚洲毛片网站| 亚洲乱亚洲乱妇24p| 91精品国产自产在线观看| 国产精品亚洲欧美日韩久久| 亚洲欧美成人网| 国产日韩欧美在线视频免费观看| 久久亚洲美女精品国产精品| 在线a网站| 日韩av在线直播| 亚洲免费毛片| 国产中文一区二区苍井空| 国产精品亚洲片在线va| 国产婬乱a一级毛片多女| 亚洲欧美不卡视频| 国产网友愉拍精品视频| 伊人久久影视| 亚洲妓女综合网995久久| 亚洲成综合人影院在院播放| 毛片手机在线看| 欧美一级在线看| 亚洲人成网站观看在线观看| a级毛片免费网站| 亚洲视频影院| 新SSS无码手机在线观看| 国产91九色在线播放| 99无码熟妇丰满人妻啪啪| 久久婷婷五月综合97色| 五月激情综合网| 天天做天天爱天天爽综合区| 久久精品一卡日本电影| 在线观看视频一区二区| 毛片大全免费观看|