Windows系統三種定時器的分析
阿新 • • 發佈:2018-12-31
3)TimerQueueTimer定時器,應該算迄今為止Windows系統最強大的定時器了。他可以支援多種工作模式,而且定時精度也是最高的。
使用時,首先要呼叫CreateTimerQueue建立一個定時器佇列,然後用CreateTimerQueueTimer來建立一個TimerQueueTimer定時器,
WT_EXECUTEDEFAULT,預設設定,回撥函式將進入一個非I/O工作執行緒佇列WT_EXECUTEINTIMERTHREAD,回撥函式作為APC,在定時器執行緒中被呼叫,被呼叫的條件是執行緒進入可警告等待狀態alertable wait status。僅適用於短時任務,否則可能會影響佇列中的其他定時器。
WT_EXECUTEINIOTHREAD,回撥函式進入一個I/O工作執行緒佇列,請注意,大多數定時器都需要呼叫執行緒進入可警告等待狀態alertable wait status,並不是隨隨便便就能發生定時呼叫的。一個執行緒是否進入可警告等待狀態可參見微軟的說明
A thread goes into an alertable wait state by calling either SleepEx, MsgWaitForMultipleObjectsEx, WaitForSingleObjectEx, or WaitForMultipleObjectsEx, with the function's bAlertable parameter set to TRUE.
所以希望定時器不受這種可警告等待狀態的影響,最好是用TimerQueue來完成。