計時器精確度

系統計時器常式通常會讓呼叫端指定計時器的絕對或相對到期時間。 例如,請參閱 KeWaitForSingleObjectKeSetTimerKeDelayExecutionThread。 作業系統可以測量到期時間的正確性受限於系統時鐘的資料細微性。

系統會在系統時鐘的每個刻度上更新系統時間,而且只會精確到最新的刻度。 如果呼叫端指定絕對到期時間,則會在處理在指定時間之後發生的第一個系統時鐘刻度期間偵測計時器的到期時間。 因此,計時器可以比指定的絕對到期時間晚超過一個系統時鐘週期。 如果改為指定計時器間隔或相對到期時間,到期時間可能會比指定時間早或晚一段時間,視此間隔的開始和結束時間完全落在系統時鐘刻度之間。 不論是否指定絕對或相對時間,即使系統時鐘的中斷處理延遲,其他裝置的中斷處理仍可能會偵測到計時器到期日。

當呼叫端指定相對到期時間時,計時器常式會將目前的系統時鐘時間新增至指定的相對到期時間,以計算用於計時器的絕對到期時間。 因為系統時間只精確到系統時鐘的最新刻度,所以計算的到期時間可能早于呼叫端預期的到期時間。 如果指定的相對到期時間接近或小於系統時鐘週期,計時器可能會立即到期,且不會延遲。

更精確地支援較短到期時間的可能方式是減少系統時鐘刻度之間的時間,但這樣做可能會增加耗電量。 此外,除非可以保證平臺中其他裝置的中斷處理,否則減少系統時鐘週期可能無法可靠地達到更精細的系統時鐘細微性。

從Windows 8開始,KeDelayExecutionThread會使用更精確的技術,從呼叫端指定的相對到期時間計算絕對到期時間。 首先,若要取得目前系統時間的更精確估計值,常式會使用系統效能計數器來測量自上次系統時鐘刻度以來經過的時間。 接下來,常式會將這個更精確的系統時間估計值新增至相對到期時間,以計算絕對到期時間。 這項技術所計算的絕對到期時間精確到微秒內。 因此,計時器不會在指定的相對到期時間經過之前到期。 計時器仍可晚于指定的時間過期系統時鐘週期,即使系統時鐘中斷的處理延遲,其他裝置的中斷處理仍可能會過期。

如果計時器到期前的系統時間變更,相對計時器不會受到影響,但系統會調整每個絕對計時器。 不論絕對系統時間為何,相對計時器一律會在經過指定的時間單位數目之後到期。 絕對計時器在特定系統時間到期,因此系統時間的變更會變更絕對計時器的等候持續時間。