利用C++Builder進行精確計時 (轉)
利用C++Builder進行精確計時:namespace prefix = o ns = "urn:schemas--com::office" />
雖然Win95下視覺化開發工具如VC、、C++Builder等都有專用的定時器Timer,而且使用很方便,可以實現一定的定時功能,但最小計時精度僅為55ms,且定時器訊息在多工操作中的優先順序很低,不能得到及時響應,往往不能滿足實時控制環境下的應用。不過Microsoft公司在
庫中已經為提供了一組用於高精度計時的底層函式,如果使用者使用得當,計時精度可到1ms。這個計時精度、對於一般的實時系統控制完全可以滿足要求。現將由C++
Builder 4.0提供的重新封裝後的一組與時間相關的主要介面函式(函式名、引數、功能與Win32 API基本相同)說明如下:
1.D timeGetTime(void)
返回從啟動開始經過的毫秒數。最大值為232,約49.71
天。
2.MMRESULT timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD dwUser, UINT fuEvent )
該函式設定一個定時回撥事件,此事件可以是一個一次性事件或週期性事件。事件一旦被啟用,便指定的回撥函式,成功後返回事件的識別符號程式碼,否則返回NULL。引數說明如下:
uDelay:以毫秒指定事件的週期。
UResolution:以毫秒指定延時的精度,數值越小定時器事件解析度越高。預設值為1ms。
LpTimeProc:指向一個回撥函式。
DwUser:存放使用者提供的回撥資料。
FuEvent:指定定時器事件型別:
TIME_ONESHOT:uDelay毫秒後只產生一次事件
TIME_PERIODIC:每隔uDelay毫秒週期性地產生事件。
3.MMRESULT timeKillEvent(UINT uTimerID)
該函式取消一個指定的定時器回撥事件。uTimerID標識要取消的事件(由timeSetEvent函式返回的識別符號)。如果成功則返回TIMERR_NOERROR,如果定時器時間不存在則返回MMSYSERR_INVALPARAM。
void CALLBACK TimeProc( UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2 );
該函式是一個應用定義的回撥函式,出現定時器事件時該函式被呼叫。TimeProc是應用程式定義的函式名的佔位符。使用該函式時要注意的是,它只能呼叫以下有限的幾組API函式:
PostMessage,
timeGetSystemTime,
timeGetTime,
timeSetEvent,
timeKillEvent ,
midiOutShortMsg,
midiOutLongMsg,
OutputDeString。
同時也不要使用完成時間很長的API函式,程式儘可能簡短。使用以上一組函式就可以完成毫秒級精度的計時和控制(在C++Builder中使用時要將頭mmsystem.h加到程式中)。由於將定時控制精確到幾毫秒,定時器事件將佔用大量的時間和系統資源,所以在滿足控制要求的前提下,應儘量將引數uResolution的數值增大。而且定時器實時控制功能完成後要儘快釋放。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988938/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用C++Builder 中OLE自動化功能實現呼叫Word進行報表製作 (轉)C++UI
- jQuery精確到毫秒倒數計時詳解jQuery
- js精確到天的倒數計時效果JS
- Java獲取精確到秒的時間戳(轉)Java時間戳
- JavaScript年月日精確到秒倒數計時JavaScript
- 利用電話線進行WindowsNT RAS(轉)Windows
- OA辦公系統,助你對企業進行精確的管理
- Windows NT RAS 精確設定 (轉)Windows
- Linux下精確到微秒級的時間操作函式(轉)Linux函式
- 怎樣確保專案評估的精確 (轉)
- 使用pytz模組進行時區轉換及時間計算
- 利用LINUX進行遠端辦公(轉)Linux
- 在Java中實現浮點數的精確計算 (轉)Java
- c++builder中怎樣進行標準輸入、出C++UI
- 關於PHP精確計算模組PHP
- Mac下利用SSH進行傳輸檔案(轉)Mac
- windows下利用ffmpeg進行視訊格式轉換Windows
- 利用磁碟的序列號進行軟體加密 (轉)加密
- LeCun轉帖,AI精確計算宇宙「設定」,登Nature子刊LeCunAI
- iOS精準計算程式碼執行耗時iOS
- C++Builder的多執行緒程式設計中一些體會。 (轉)C++UI執行緒程式設計
- Oracle如何精確計算row的大小Oracle
- js精確計算浮點數相加JS
- 海外問卷調查:利用海外IP代理進行精準問卷調查
- 如何精確度量 iOS App 的啟動時間iOSAPP
- 《利用Python進行資料分析·第2版》 轉Python
- java二進位制運算十進位制(精確運算)Java
- c++builder快捷鍵大全 (轉)C++UI
- C++BUILDER 6 新特色 (轉)C++UI
- C++Builder 高手進階 (一)編寫彈出廣告殺手 (轉)C++UI
- 利用perf進行效能分析
- javascript浮點數精確計算程式碼JavaScript
- 精確統計程式碼量(Java實現)Java
- PHP浮點數的精確計算BCMathPHP
- 利用awt與swing進行桌面程式設計(1)程式設計
- 【Java】得到當前系統時間,精確到毫秒Java
- 利用齊次座標進行二維座標轉換
- 利用rowid 進行大批量資料更新 -- 轉帖