共用方式為


可等候定時器物件

可等候的定時器物件 是同步處理物件,其狀態會設定為在指定的到期時間到達時發出訊號。 可以建立兩種類型的可等候定時器:手動重設和同步處理。 任一類型的定時器也可以是定期定時器。

物件 描述
手動重設定時器 在呼叫 SetWaitableTimer之前,其狀態會保持訊號的定時器,以建立新的到期時間。
同步處理定時器 定時器,其狀態會保持訊號,直到線程完成定時器物件的等候作業為止。
定期定時器 每次指定期間到期時重新啟用的定時器,直到定時器重設或取消為止。 定期定時器是定期手動重設定時器或定期同步處理定時器。

 

注意

當定時器發出訊號時,處理器必須執行 以處理相關聯的指令。 高頻率定期定時器會讓處理器持續忙碌,以防止系統在任何有意義的時間時間內維持較低的 電源狀態。 這可能會對可攜式計算機電池使用時間和相依於有效電源管理的案例產生負面影響,例如大型數據中心。 為了提高能源效率,請考慮在應用程式中使用事件型通知,而不是以時間為基礎的通知。 如果需要定時器,請使用一次發出訊號的定時器,而不是定期定時器,或將間隔設定為大於一秒的值。

 

線程會使用 createWaitableTimer CreateWaitableTimerEx 函式來建立定時器物件。 建立線程會指定定時器是手動重設定時器還是同步處理定時器。 建立線程可以指定定時器對象的名稱。 其他進程中的線程可以在呼叫 openWaitableTimer 函式時指定其名稱,以開啟現有定時器的句柄。 任何具有定時器物件句柄的線程都可以使用其中一個 等候函式, 等候定時器狀態設定為訊號。

  • 線程會呼叫 SetWaitableTimer 函式來啟動定時器。 請注意,SetWaitableTimer使用下列參數:
  • 使用 lpDueTime 參數,指定要將定時器設定為訊號狀態的時間。 當手動重設定時器設定為訊號狀態時,它會保持處於此狀態,直到 setWaitableTimer 建立新的到期時間為止。 當同步處理定時器設定為訊號狀態時,它會維持在這個狀態,直到線程完成定時器物件的等候作業為止。
  • 使用 SetWaitableTimer 函式的 lPeriod 參數來指定定時器期間。 如果期間不是零,定時器是定期定時器;它會在每次期間到期時重新啟用,直到定時器重設或取消為止。 如果期間為零,定時器不是定期定時器;它會發出一次信號,然後停用。

線程可以使用 CancelWaitableTimer 函式,將定時器設定為非使用中狀態。 若要重設定時器,請呼叫 setWaitableTimer 。 當您完成定時器物件時,請呼叫 CloseHandle 關閉定時器物件的句柄。

可等候定時器的行為摘要如下:

  • 設定定時器時,如果定時器已作用中,則會取消它、定時器的狀態為未簽署,而且定時器會放在核心定時器佇列中。
  • 定時器到期時,定時器會設定為訊號狀態。 如果定時器有完成例程,它會排入設定定時器的線程。 完成例程會保留在線程的 異步過程調用 (APC) 佇列中,直到線程進入可警示的等候狀態為止。 此時,會分派 APC 並呼叫完成例程。 如果定時器是定期的,則會將其放在核心定時器佇列中。
  • 當定時器取消時,如果它擱置中,則會從核心定時器佇列中移除。 如果定時器已過期,而且仍有 APC 排入至設定定時器的線程,APC 就會從線程的 APC 佇列中移除。 定時器的訊號狀態不會受到影響。

異步過程調用

使用可等候定時器物件