複製鏈接
請複製以下鏈接發送給好友

可等待定時器

鎖定
可等待定時器對象Windows操作系統的一種同步對象,當設定的期限到了時,對象被置為signaled狀態。
中文名
可等待定時器
性    質
同步對象
用    途
定時
領    域
計算機

可等待定時器簡介

可創建兩種可等待定時器對象:
  • 手工重置(manual-reset):保持signaled狀態直至調用SetWaitableTimer函數設置了新的期限。
  • 同步(synchronization):保持signaled狀態直至一個線程在該對象上完成了等待操作。
兩種可等待定時器對象都可以是週期定時器(periodic timer)。週期定時器在每次週期到期時可重新激活,直至它被重置或者被取消。週期定時器或者是手工重置定時器或者是同步定時器。
當定時器變為signaled狀態, 處理器須執行相關的指令(如completion routine)。高頻率的定時器使得處理器處於繁忙狀態,阻止其進入低能耗狀態。考慮在程序中使用事件通知而不是定時器通知。如果必須使用定時器,考慮使用一次性定時器而不是週期定時器。或者設置週期定時器的間隔大於1秒鐘。
線程使用CreateWaitableTimer或CreateWaitableTimerEx函數創建定時器對象,並指明是手工重置定時器還是同步定時器,還可指定定時器的名字. 其他進程中的線程可以指出定時器的名字,用OpenWaitableTimer函數打開一個已經存在的定時器。任何線程可以給出一個定時器的句柄,用等待函數(wait function)在該定時器對象上等待其狀態變為signaled.
線程調用SetWaitableTimer函數來激活定時器,使用CancelWaitableTimer函數設置定時器為無效(inactive)狀態。使用完定時器後,調用CloseHandle函數關閉它.
Windows操作系統對定時器對象的處理過程為:
  • 當一個定時器被啓動(set),定時器對象的狀態為nonsignaled, 並被放在內核定時器隊列中。
  • 當一個定時器到期,定時器對象置為signaled狀態。如果定時器有(綁定的)完成過程(completion routine), 該完成過程被放入啓動該定時期的線程的異步過程調用(APC)隊列,直至該線程進入可喚醒等待狀態(alertable wait state)時操作系統按照異步過程調用方式執行該過程. 如果為週期定時器,它再次被放入內核定時器隊列。
  • 當一個定時器被取消,如果它處於等待期間,會從內核定時器隊列中刪除。如果定時器已經到期了並且在啓動該定時期的線程有一個APC處於排隊中,在線程APC隊列中刪除這個未執行的APC。 定時器的信號態(signaled state)不受影響。 [1] 

可等待定時器異步過程調用

異步過程調用(asynchronous procedure call)是函數(過程)在特定線程中被異步執行。在Microsoft Windows操作系統中, APC是一種併發機制,用於異步IO或者定時器
Windows NT操作系統中有3種APC:
  • 內核模式特殊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,完成後再繼續線程的原來執行。 [1] 

可等待定時器Windows操作系統

Microsoft Windows是微軟公司推出的一系列操作系統。它問世於1985年,起初是MS-DOS之下的桌面環境,其後續版本逐漸發展成為主要為個人電腦服務器用户設計的操作系統,並最終獲得了世界個人計算機操作系統的壟斷地位。此操作系統可以在幾種不同類型的平台上運行,如個人計算機(PC)、移動設備、服務器(Server)和嵌入式系統等等,其中在個人計算機的領域應用內最為普遍。在2004年國際數據信息公司一次有關未來發展趨勢的會議上,副董事長Avneesh Saxena宣佈Windows擁有終端操作系統大約70%的市場份額。
Windows操作系統目前最新的穩定版是於2015年7月29日發佈的Windows 10。Windows Server目前最新的穩定版是2016年9月26日發佈的Windows Server 2016 [2] 
參考資料
  • 1.    張雪梅, 曹梅生. 呼叫等待定時器在網絡優化中的應用[J]. 電腦迷, 2017(12).
  • 2.    Lesson 2 - Windows NT System Overview. Microsoft TechNet. Microsoft. [2014-11-25].