[問題] 關於Windows的Timer

看板C_and_CPP (C/C++)作者 (阿瑜)時間15年前 (2011/04/02 01:31), 編輯推噓0(0012)
留言12則, 4人參與, 最新討論串1/1
開發平台(Platform): VC++ 額外使用到的函數庫(Library Used): MFC 問題(Question): 需要一個即時的Timer,即不可被其他message插隊。 若使用SetTimer產生的WM_TIMER message並不即時, 譬如說,故意不斷的移動視窗,兩個WM_TIMER之間 就會多了很多WM_PAINT等的message,使得timer的 時間非常不準確。 如何產生一個非常準確的timer呢? 希望有人可以幫忙或一起討論,先謝謝了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.36.191.221

04/02 01:37, , 1F
time.h clock()函式
04/02 01:37, 1F

04/02 14:34, , 2F
謝謝~我先試試
04/02 14:34, 2F

04/04 19:22, , 3F
多工系統很難辦到, 知道wm_paint會搞鬼可試著將它欄截
04/04 19:22, 3F

04/04 19:25, , 4F
果你是要準的時間, 但是可以漏掉1 2 個TIMER 沒有關係, 那
04/04 19:25, 4F

04/04 19:31, , 5F
你可以在ONTIMER 中再加x=GETTICKCOUNT(), 在做一次確認.
04/04 19:31, 5F

04/04 19:31, , 6F
if(x%500<50 && x%500>450){//do..;}//0.5秒+-50ms才會做
04/04 19:31, 6F

04/04 21:03, , 7F
clock()函式的單位應該是ms -->很快了
04/04 21:03, 7F

04/04 21:04, , 8F
用的是cpu時脈
04/04 21:04, 8F

04/05 11:26, , 9F
一般的作法是用worker thread,這麼就不會被UI影響
04/05 11:26, 9F

04/05 11:29, , 10F
但是multi-thread就要考慮到同步,這需要一點進階的知識
04/05 11:29, 10F

04/05 11:37, , 11F
另外一招是在所有OnXXX()都檢查時間是否到了然後callback
04/05 11:37, 11F

04/05 11:39, , 12F
但是不建議拿UI thread來幹這種事(視情況而定)
04/05 11:39, 12F
感謝各位的回答,我提供一個很不錯的timer -- multimedia timer。 最快可以到1ms更新一次的timer,而且優先權很高。 各位有興趣可以查查msdn。 ※ 編輯: lordfish62 來自: 114.24.134.10 (04/07 23:40)
文章代碼(AID): #1DbWlrf- (C_and_CPP)
文章代碼(AID): #1DbWlrf- (C_and_CPP)