Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met een systeemtimerroutine kan de beller doorgaans een absolute of een relatieve verlooptijd voor een timer opgeven. Zie bijvoorbeeld KeWaitForSingleObject, KeSetTimer of KeDelayExecutionThread. De nauwkeurigheid waarmee het besturingssysteem verlooptijden kan meten, wordt beperkt door de granulariteit van de systeemklok.
De systeemtijd wordt bijgewerkt met elke tik van de systeemklok en is uitsluitend nauwkeurig tot de laatste tik. Als de aanroeper een absolute verlooptijd opgeeft, wordt de vervaldatum van de timer gedetecteerd bij de verwerking van de eerste systeemtijdtik die plaatsvindt na de opgegeven tijd. De timer kan dus zoveel verlopen als één systeemklokperiode later dan de opgegeven absolute verlooptijd. Als in plaats daarvan een timerinterval of relatieve verlooptijd wordt opgegeven, kan de vervaldatum plaatsvinden tot een periode eerder dan of een periode later dan de opgegeven tijd, afhankelijk van waar precies de begin- en eindtijden van dit interval tussen systeemkloktekens vallen. Ongeacht of er een absolute of relatieve tijd is opgegeven, kan de timerverloop mogelijk pas later worden gedetecteerd als de onderbrekingsverwerking voor de systeemklok wordt vertraagd door de onderbrekingsverwerking voor andere apparaten.
Wanneer de beller een relatieve verlooptijd opgeeft, voegt de timerroutine de huidige systeemkloktijd toe aan de opgegeven relatieve verlooptijd om de absolute verlooptijd te berekenen die voor de timer moet worden gebruikt. Omdat de systeemtijd alleen nauwkeurig is voor de laatste tik van de systeemklok, kan de berekende verlooptijd tot een systeemklokperiode ouder zijn dan de verlooptijd die door de beller wordt verwacht. Als een opgegeven relatieve verlooptijd dicht bij of kleiner is dan de systeemklokperiode, kan de timer onmiddellijk verlopen, zonder vertraging.
Een mogelijke manier om kortere verlooptijden nauwkeuriger te ondersteunen, is door de tijd tussen systeemkloktekens te verminderen, maar dit zal waarschijnlijk het energieverbruik verhogen. Bovendien kan het verkorten van de systeemklokperiode niet betrouwbaar een nauwkeurigere systeemklokgranulariteit bereiken, tenzij wordt gegarandeerd dat de interruptverwerking voor de andere apparaten in het platform de verwerking van systeemklokonderbrekingen niet vertraagt.
Vanaf Windows 8 gebruikt KeDelayExecutionThread een nauwkeurigere techniek om de absolute verlooptijd te berekenen van een door de aanroeper opgegeven relatieve verlooptijd. Om eerst een nauwkeurigere schatting van de huidige systeemtijd te verkrijgen, gebruikt de routine het systeemprestatiemeteritem om de tijd te meten die is verstreken sinds de laatste systeemklok. Vervolgens voegt de routine deze nauwkeurigere schatting van de systeemtijd toe aan de relatieve verlooptijd om de absolute verlooptijd te berekenen. De absolute verlooptijd die door deze techniek wordt berekend, is nauwkeurig tot binnen een microseconde. Als gevolg hiervan verloopt de timer niet voordat de opgegeven relatieve verlooptijd is verstreken. De timer kan nog steeds verlopen tot een systeemklokperiode later dan de opgegeven tijd, en kan zelfs later verlopen als de verwerking van de systeemklokonderbrek wordt vertraagd door interruptverwerking voor andere apparaten.
Als de systeemtijd verandert voordat een timer verloopt, wordt een relatieve timer niet beïnvloed, maar wordt elke absolute timer aangepast. Een relatieve timer verloopt altijd nadat het opgegeven aantal tijdseenheden is verstreken, ongeacht de absolute systeemtijd. Een absolute timer verloopt op een specifieke systeemtijd, zodat een wijziging in de systeemtijd de wachttijd van een absolute timer wijzigt.