共用方式為


關於計時器

本主題描述如何建立、識別、設定和刪除計時器。 應用程式會在經過指定的時間之後,使用計時器來排程視窗的事件。 每次計時器經過指定的間隔(或逾時值)時,系統都會通知與計時器相關聯的視窗。 由於計時器的精確度取決於系統時鐘速率,以及應用程式從訊息佇列擷取訊息的頻率,因此逾時值只是近似值。

本主題包括下列各節。

計時器作業

應用程式會使用 SetTimer 函 式建立計時器。 新的計時器會在建立間隔後立即開始計時。 應用程式可以使用 SetTimer 來變更計時器的逾時值 ,而且可以使用 KillTimer 函式終結計時器 若要有效率地使用系統資源,應用程式應該終結不再需要的計時器。

每個計時器都有唯一識別碼。 建立計時器時,應用程式可以指定識別碼,或讓系統建立唯一值。 WM_TIMER 訊息的第一個 參數包含張貼訊息的計時器識別碼。

如果您在呼叫 SetTimer 時指定視窗控制碼,應用程式會將計時器與該視窗產生關聯。 每當計時器逾時值經過時,系統就會將WM_TIMER 訊息張貼 至與計時器相關聯的視窗。 如果在呼叫 SetTimer 時未指定任何視窗控制碼,則建立計時器的應用程式必須監視其訊息佇列,以 取得WM_TIMER 訊息,並將其分派至適當的視窗。

注意

如果您指定選擇性 TIMERPROC 回呼函式,則會在訊息迴圈 期間 呼叫函式,且 不會將WM_TIMER 分派至 WNDPROC 回呼。

如果您需要在計時器經過時收到通知,請使用可等候的計時器。 如需詳細資訊,請參閱 可等候的計時器物件

高解析度計時器

計數器是一般詞彙,用於程式設計來參考遞增變數。 某些系統包含高解析度效能計數器,可提供高解析度耗用時間。

如果系統上存在高解析度效能計數器,您可以使用 QueryPerformanceFrequency 函式以每秒計數表示頻率。 計數的值相依于處理器。 例如,在某些處理器上,計數可能是處理器時鐘的週期速率。

QueryPerformanceCounter 函式會擷取高解析度效能計數器的目前值。 藉由在程式碼區段的開頭和結尾呼叫此函式,應用程式基本上會使用計數器做為高解析度計時器。 例如,假設 QueryPerformanceFrequency 指出高解析度效能計數器的頻率是每秒 50,000 個計數。 如果應用程式在程式碼區段之前和之後立即呼叫 QueryPerformanceCounter ,計數器值可能分別為 1500 個計數和 3500 個計數。 這些值表示執行程式碼時經過 .04 秒(2000 個計數)。

可等候的計時器物件

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

執行緒會使用 CreateWaitableTimer CreateWaitableTimerEx 函式來建立計時器物件。 建立執行緒會指定計時器是手動重設計時器還是同步處理計時器。 建立執行緒可以指定計時器物件的名稱。 其他進程中的執行緒可以在呼叫 OpenWaitableTimer 函 式時指定其名稱,以開啟現有計時器的控制碼。 具有計時器物件控制碼的任何執行緒都可以使用其中一個等候函式來等候計時器狀態設定為訊號。

如需使用可等候計時器物件進行執行緒同步處理的詳細資訊,請參閱 可等候計時器物件