系統定時器例程通常可讓呼叫端指定定時器的絕對或相對到期時間。 例如,請參閱 KeWaitForSingleObject、 KeSetTimer 或 KeDelayExecutionThread。 作業系統測量到期時間的準確性受到系統時鐘精細度的限制。
系統時間會在系統時鐘的每個刻度上更新,而且只精確到最新的刻度。 如果呼叫端指定絕對到期時間,則會在處理指定時間之後 首次 發生的系統時鐘刻度時偵測定時器到期。 因此,定時器的到期時間可能比指定的絕對到期時間遲一個系統時鐘週期。 如果改為指定定時器間隔或相對到期時間,則到期時間可能會比指定的時間早或晚一段時間,視此間隔的開始和結束時間確切落在系統時鐘刻度之間的位置而定。 不論是指定絕對時間或相對時間,如果因其他裝置的中斷處理而延遲系統時鐘的中斷處理,定時器到期可能不會即時被偵測到。
當呼叫端指定相對到期時間時,定時器例程會將目前的系統時鐘時間新增至指定的相對到期時間,以計算定時器使用的絕對到期時間。 因為系統時間只精確到系統時鐘的最新刻度,因此計算的到期時間最多可以早於呼叫端預期的到期時間。 如果指定的相對到期時間接近或小於系統時鐘週期,定時器可能會立即到期,且不會延遲。
更準確地支援較短到期時間的可能方法是減少系統時鐘刻度之間的時間,但這樣做可能會增加耗電量。 此外,減少系統時鐘週期可能無法可靠地達到更精細的系統時鐘粒度,除非平臺中其他裝置的中斷處理可以保證不會延遲系統時鐘中斷的處理。
從 Windows 8 開始, KeDelayExecutionThread 會使用更精確的技術,從呼叫端指定的相對到期時間計算絕對到期時間。 首先,為了取得較精確的目前系統時間估計值,例程會使用系統性能計數器來測量自上次系統時鐘刻度之後經過的時間。 接下來,例程會將系統時間的更精確估計新增至相對到期時間,以計算絕對到期時間。 這項技術計算的絕對到期時間精確到微秒內。 因此,定時器將不會在指定的相對到期時間經過之前到期。 定時器仍然可能在比指定時間晚一個系統時鐘週期的時候到期,如果因處理其他裝置的中斷而導致系統時鐘中斷的處理延遲,定時器還可能會更晚到期。
如果系統時間在定時器到期前變更,相對定時器不會受到影響,但系統會調整每個絕對定時器。 不論絕對系統時間為何,相對定時器一律會在指定的時間單位數過後到期。 絕對定時器在特定系統時間到期,因此系統時間的變更會變更絕對定時器的等候持續時間。