可等候的計時器物件
可等候的計時器物件是同步處理物件,其狀態會設定為在指定的到期時間送達時發出訊號。 您可以建立兩種類型的可等候計時器:手動重設和同步處理。 任一類型的計時器也可以是定期計時器。
Object | 描述 |
---|---|
手動重設計時器 | 在 呼叫 SetWaitableTimer 以建立新的到期時間之前,其狀態會維持訊號的計時器。 |
同步處理計時器 | 線上程完成計時器物件的等候作業之前,其狀態會維持訊號的計時器。 |
定期計時器 | 每次指定期間到期時重新開機的計時器,直到計時器重設或取消為止。 定期計時器是定期手動重設計時器或定期同步處理計時器。 |
注意
當計時器收到訊號時,處理器必須執行 以處理相關聯的指令。 高頻率的定期計時器會讓處理器持續忙碌,這可防止系統在任何有意義的時間時間內維持較低的 電源狀態 。 這可能會對可攜式電腦電池使用時間和相依于有效電源管理的案例造成負面影響,例如大型資料中心。 為了提升能源效率,請考慮在應用程式中使用事件型通知,而不是以時間為基礎的通知。 如果需要計時器,請使用一次發出訊號的計時器,而不是定期計時器,或將間隔設定為大於一秒的值。
執行緒會使用 CreateWaitableTimer 或 CreateWaitableTimerEx 函式來建立計時器物件。 建立執行緒會指定計時器是手動重設計時器還是同步處理計時器。 建立執行緒可以指定計時器物件的名稱。 其他進程中的執行緒可以在 呼叫 OpenWaitableTimer 函式時指定其名稱,以開啟現有計時器的控制碼。 任何具有計時器物件控制碼的執行緒都可以使用其中一個 等候函式 ,等候計時器狀態設定為已發出訊號。
- 執行緒會呼叫 SetWaitableTimer 函 式來啟動計時器。 請注意 ,針對 SetWaitableTimer使用下列參數:
- 使用 lpDueTime 參數來指定計時器設定為訊號狀態的時間。 當手動重設計時器設定為訊號狀態時,它會維持在這個狀態,直到 SetWaitableTimer 建立新的到期時間為止。 當同步處理計時器設定為訊號狀態時,它會維持在這個狀態,直到執行緒完成計時器物件的等候作業為止。
- 使用SetWaitableTimer函式的lPeriod參數來指定計時器期間。 如果期間不是零,計時器是定期計時器;它會在每次期間到期時重新啟用,直到計時器重設或取消為止。 如果期間為零,計時器不是定期計時器;它會發出一次訊號,然後停用。
執行緒可以使用 CancelWaitableTimer 函 式,將計時器設定為非使用中狀態。 若要重設計時器,請呼叫 SetWaitableTimer。 當您完成計時器物件時,請呼叫 CloseHandle 以關閉計時器物件的控制碼。
可等候計時器的行為摘要如下:
- 設定計時器時,如果計時器已在使用中,則會取消它,計時器的狀態為非簽署,而且計時器會放在核心計時器佇列中。
- 當計時器到期時,計時器會設定為已發出訊號的狀態。 如果計時器有完成常式,則會排入設定計時器的執行緒。 完成常式會保留線上程的 非同步程序呼叫 中, (APC) 佇列,直到執行緒進入可警示的等候狀態為止。 此時會分派 APC,並呼叫完成常式。 如果計時器是週期性,它會放在核心計時器佇列中。
- 當計時器取消時,如果已擱置,則會從核心計時器佇列中移除它。 如果計時器已過期,而且仍有 APC 排入佇列至設定計時器的執行緒,APC 就會從執行緒的 APC 佇列中移除。 計時器的訊號狀態不會受到影響。
相關主題