可等待定時器對象是Windows作業系統的一種同步對象,當設定的期限到了時,對象被置為signaled狀態。
基本介紹
- 中文名:可等待定時器
- 性質:同步對象
- 用途:定時
- 領域:計算機
簡介
- 手工重置(manual-reset):保持signaled狀態直至調用SetWaitableTimer函式設定了新的期限。
- 同步(synchronization):保持signaled狀態直至一個執行緒在該對象上完成了等待操作。
- 當一個定時器被啟動(set),定時器對象的狀態為nonsignaled, 並被放在核心定時器佇列中。
- 當一個定時器到期,定時器對象置為signaled狀態。如果定時器有(綁定的)完成過程(completion routine), 該完成過程被放入啟動該定時期的執行緒的異步過程調用(APC)佇列,直至該執行緒進入可喚醒等待狀態(alertable wait state)時作業系統按照異步過程調用方式執行該過程. 如果為周期定時器,它再次被放入核心定時器佇列。
- 當一個定時器被取消,如果它處於等待期間,會從核心定時器佇列中刪除。如果定時器已經到期了並且在啟動該定時期的執行緒有一個APC處於排隊中,線上程APC佇列中刪除這個未執行的APC。 定時器的信號態(signaled state)不受影響。
異步過程調用
- 核心模式特殊APC:相應的APC函式為核心函式。在IRQL=APC_LEVEL級上有可調度的活動時,執行此類APC。會搶先所有的用戶模態以及IRQL = PASSIVE_LEVEL的核心模態下的代碼的執行。
- 核心模式常規APC:在所有的核心模式特殊APC執行完畢後,核心模式常規APC在IRQL = PASSIVE_LEVEL下開始執行。會搶先所有的用戶模式代碼的執行。用於檔案系統。
- 用戶模式APC:是指相應的 APC 函式位於用戶空間、在用戶空間執行。執行緒處於alertable wait狀態該APC才可以被調度執行。用戶模式下調用系統API如SleepEx,SignalObjectAndWait,WaitForSingleObjectEx,WaitForMultipleObjectsEx,MsgWaitForMultipleObjectEx等,可以使執行緒進入alertable狀態。這些API函式最終都是調用了核心中的KeWaitForSingleObject,KeWaitForMultipleObjects,KeWaitForMutexObject,KeDelayExecutionThread,KeTestAlertThread等函式。執行緒在alertable wait狀態所有核心模式API執行完畢,返回用戶模式時,核心轉去執行APC,完成後再繼續執行緒的原來執行。