關於定時器
本主題描述如何建立、識別、設定和刪除定時器。 應用程式會在經過指定的時間之後,使用定時器來排程視窗的事件。 每次定時器經過指定的間隔(或逾時值)時,系統都會通知與定時器相關聯的視窗。 由於定時器的精確度取決於系統時鐘速率,以及應用程式從消息佇列擷取訊息的頻率,因此逾時值只是近似值。
本主題包含下列各節。
定時器作業
應用程式會使用 SetTimer 函式來建立定時器。 新的定時器會在建立間隔后立即開始計時。 應用程式可以使用 SetTimer 來變更定時器的逾時值,而且可以使用 KillTimer 函式終結定時器。 若要有效率地使用系統資源,應用程式應該終結不再需要的定時器。
每個定時器都有唯一標識碼。 建立定時器時,應用程式可以指定標識符,或讓系統建立唯一值。 WM_TIMER 訊息的第一個參數包含張貼訊息的定時器標識碼。
如果您在呼叫 setTimer 中指定視窗句柄,應用程式會將定時器與該視窗產生關聯。 每當定時器逾時值經過時,系統就會將 WM_TIMER 訊息張貼至與定時器相關聯的視窗。 如果在呼叫 SetTimer 時未指定任何視窗句柄,則建立定時器的應用程式必須監視其訊息佇列 WM_TIMER 訊息,並將其分派至適當的視窗。
如果您需要在定時器結束時收到通知,請使用可等候的定時器。 如需詳細資訊,請參閱 等候定時器物件。
高解析度定時器
計數器是一般詞彙,用於程式設計來參考遞增變數。 某些系統包含高解析度性能計數器,可提供高解析度耗用時間。
如果系統上存在高解析度性能計數器,您可以使用 QueryPerformanceFrequency 函式,以每秒計數表示頻率。 計數的值相依於處理器。 例如,在某些處理器上,計數可能是處理器時鐘的週期速率。
QueryPerformanceCounter 函式會擷取高解析度性能計數器的目前值。 藉由在程式代碼區段的開頭和結尾呼叫此函式,應用程式基本上會使用計數器做為高解析度定時器。 例如,假設 QueryPerformanceFrequency 表示高解析度性能計數器的頻率為每秒 50,000 個計數。 如果應用程式在要計時的程式代碼區段之前立即呼叫 QueryPerformanceCounter 並在之後再次呼叫,計數器值可能分別是 1500 次和 3500 次。 這些值表示執行程式代碼時經過 .04 秒(2000 個計數)。
可等候的定時器對象
可等候的定時器對像是同步處理物件,其狀態設定為在指定的到期時間到達時發出訊號。 可以建立兩種類型的可等候定時器:手動重設和同步處理。 任一類型的定時器也可以是定期定時器。
線程會使用 createWaitableTimer 或 CreateWaitableTimerEx 函式來建立定時器物件。 建立線程會指定定時器是手動重設定時器還是同步處理定時器。 建立線程可以指定定時器對象的名稱。 其他進程中的線程可以在呼叫 openWaitableTimer 函式時指定其名稱,以開啟現有定時器的句柄。 具有定時器物件句柄的任何線程都可以使用其中一個等候函式來等候定時器狀態設定為訊號。
如需使用可等候定時器物件進行線程同步處理的詳細資訊,請參閱 可等候定時器物件。