回答
處理定時器的另一種方法是使用等待定時器對象。這些不需要任何消息處理,不要使用WM_TIMER或回調。因此,它們有點複雜。瞭解Windows事件系統將會很有幫助。
定時器對象有三種類型:手動復位,同步和週期性;有四個函數用於處理計時器對象:CreateWaitableTimer,SetWaitableTimer,CancelWaitableTimer和CloseHandle(還有第五個OpenWaitableTimer,但這對於很多人來說不太可能有用)。還有一組函數需要通知計時器何時到期:WaitForSingleObject,MsgWaitForSingleObject,WaitForMultipleObjects和MsgWaitForMultipleObjects是最有用的。
使用這些計時器通常的方法是:
CreateWaitableTimer (...)
SetWaitableTimer (...)
WaitForSingleObject (...)
CloseHandle (...)
與此相比,SetTimer的 - 只有這樣,才能知道,如果計時器已過期是輪詢它,無論是在一個循環或與infinte超時(即掛起線程直到計時器過去)。
優點:非常靈活,不需要有消息隊列。 缺點:很難用
通常,看看你要使用的API,例如MFC,Qt或GTK;他們都有計時器班。
如果你不打算使用的GUI API,我個人比較喜歡的boost ::定時器(www.boost.org)
有在Windows系統上的兩個定時器相關的功能:SetTimer的和KillTimer函數(我知道這些名字很奇怪 - CreateTimer和DestroyTimer會更加明智,就像在CreateWindow和DestroyWindow中一樣,但這是可用的)。
SetTimer可以以兩種模式之一運行:計時器事件可以觸發用戶定義的回調,或者可以將消息發佈到窗口。這個函數的格式是:
timer_id = SetTimer (window, event_id, interval, callback);
使用回調:
timer_id = SetTimer (NULL, NULL, interval_in_milliseconds, callback);
爲了得到一個WM_TIMER消息的窗口:
timer_id = SetTimer (window, event_id, interval_in_milliseconds, NULL);
在這兩種情況下,調用線程需要當兩個變體發出WM_TIMER消息時都有一個消息隊列,默認處理程序調用回調函數。
根據您使用的操作系統,間隔值有上限和下限。 See the API documentation瞭解更多詳情。
要釋放計時器你用它完成後,請執行下列操作,如果你提供了一個窗口句柄:
KillTimer (window, event_id); // event_id is important!
,如果你使用的回調:
KillTimer (NULL, timer_id);
一個窗口可以有許多定時器與它關聯,請爲每個定時器使用不同的event_id。重新使用event_id將停止計時器的第一個實例,而不發佈WM_TIMER消息。
優點:相當容易使用。 缺點:間隔結束和處理WM_TIMER消息之間的延遲,分辨率很大,需要消息處理循環。
對於高分辨率定時器,使用queryperformancecounter
- 1. 在Windows服務中使用計時器
- 2. 如何在JavaScript中使用計時器?
- 3. 如何在計時器中使用uidatepickerview?
- 4. 如何在uitableview中使用計時器?
- 5. 如何在不再使用計時器時打破計時器
- 6. 在待機期間在Windows Mobile中使用計時器
- 7. 如何使計時器在Python中實時計時?
- 8. Windows Mobile - 使用計時器控件
- 9. 如何設置在asp.net中使用計時器的計數
- 10. 如何使用計時器測試多線程的Windows服務?
- 11. 在VB中使用計時器動畫Windows桌面背景
- 12. 在Windows窗體中插入計時器
- 13. 如何在當時使用QTextStream readline之一,使用計時器
- 14. 計時器如何在.net Windows服務中工作?
- 15. 如何使VBScript計時器
- 16. 如何使用計時器計算累加器計時器的算法?
- 17. 如何在使用分片計數器時使用計數器進行排序
- 18. 如何在apache中使用計數器
- 19. 使用Windows窗體中的計時器調用方法
- 20. 如何在c通用Windows應用程序中包含計時器#
- 21. 如何使用JLabel創建計時器?
- 22. 如何使用Swift做CountDown計時器
- 23. C#如何使用計時器?
- 24. 如何使用擺動計時器
- 25. 如何使用Swift添加計時器?
- 26. 如何在jQuery中使用ajax計時器?
- 27. 如何在jQuery中使用mousedown控制計時器?
- 28. 如何在activiti計時器事件中使用默認日曆?
- 29. 如何在d3 V3中使用計時器?
- 30. 如何使用javascript在mvc中顯示事件計時器
@subbu:如果你真的想要得到的幫助就在這裏,所以你可能想仔細閱讀本:http://www.catb.org /~esr/faqs/smart-questions.html。 你的問題非常廣泛,很難理解你想要做什麼。所以顯然幫助你不是很容易。 – 2009-04-21 12:45:12
你的問題聽起來更像是一個需求「所以要讓任何示例代碼兼容」。要客氣,5萬多人在這裏對你很好, – 2009-04-21 13:02:39
+1,以改善編輯。 – 2009-04-21 13:30:24