全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3059
推到 Plurk!
推到 Facebook!

更精確的多媒體計時器類別 - TMMTimer

 
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-11 20:22:29 IP:218.166.xxx.xxx 未訂閱
Dear ALL: 有鑑於 TTimer 計時器不太準時,所以將 Windows 提供的 Multimedia Timer 包裝一下,做成BCB的類別。TTimer 在 Win XP 下最多提供到 10ms 的精確度,而多媒體計時器經過測試,1 ms 應該沒問題。 TMMTimer 類別的用法與 TTimer 完全相同,差別在於要設定解析度與指定使用者的計時器觸發事件函式而已,在範例中都有說明。 更詳細的說明,請參考 Windows SDK 與陳寬達著的"C++ Builder 深度歷險"細說計時器部分。 在包裝的過程中,摸索最久的該算是在 callback function 中該怎樣呼叫 member function。雖然想用函式指標,也找了關於 BCB 的關鍵字"__closure"的用法,但怎麼弄 compiler 就是不給過~~後來將
附加檔案:51703_TMMTimer.rar
i_am_jcl
一般會員


發表:3
回覆:9
積分:2
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-16 03:18:06 IP:61.231.xxx.xxx 未訂閱
參考這篇文章 或許有幫助 http://www.function-pointer.org/callback.html    我把callback function TimerProc變成member function TimerProc2 不過即使是同是member function 還是會有無法呼叫OnTimer的詭異問題     錯誤訊息如下: [C++ Error] TMMTimerUnit.cpp(108): E2231 Member TMMTimer::OnTimer cannot be used without an object    於是我保留作者您的做法 在timeSetEvent那段也是將this傳入callback function. 程式執行效果也是相同.  希望對你的問題有幫助~ 程式異動部份: < class="code"> class TMMTimer { ... public : static void __stdcall TimerProc2(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD_PTR dw1, DWORD_PTR dw2); ... }; void __fastcall TMMTimer::SetEnabled(bool value){ ... FTImerID = timeSetEvent(FInterval,FResolution,TimerProc2,(DWORD)this,TIME_PERIODIC); ... } void __stdcall TMMTimer::TimerProc2(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD_PTR dw1, DWORD_PTR dw2) { ((TMMTimer *)dwUser)->OnTimer(); }
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-16 21:28:24 IP:218.166.xxx.xxx 未訂閱
i_am_jcl 你好: 謝謝你提供的資料~ 當初在試驗的時候,也有宣告 >
系統時間:2024-05-11 23:23:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!