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.
Vanaf Windows 8.1 kunnen stuurprogramma's de ExXxxTimer-routines gebruiken om timers met een hoge resolutie te beheren. De nauwkeurigheid van een timer met een hoge resolutie wordt alleen beperkt door de maximale ondersteunde resolutie van de systeemklok. Daarentegen zijn timers die beperkt zijn tot de standaardresolutie van de systeemklok aanzienlijk minder nauwkeurig.
Voor timers met een hoge resolutie zijn echter systeemklokonderbrekingen met een hogere frequentie vereist, wat meestal het energieverbruik verhoogt. Stuurprogramma's moeten dus alleen timers met een hoge resolutie gebruiken wanneer de nauwkeurigheid van de timer essentieel is en in alle andere gevallen timers voor standaardresolutie gebruiken.
Als u een timer met hoge resolutie wilt maken, roept een WDM-stuurprogramma de ExAllocateTimer-routine aan en stelt u de vlag EX_TIMER_HIGH_RESOLUTION in de parameter Kenmerken . Wanneer het stuurprogramma de ExSetTimer-routine aanroept om de timer met hoge resolutie in te stellen, verhoogt het besturingssysteem de resolutie van de systeemklok, indien nodig, zodat de tijden waarop de timer verloopt nauwkeuriger overeenkomen met de nominale verlooptijden die zijn opgegeven in de parameters DueTime en Period .
Een Kernel-Mode KMDF-stuurprogramma (Driver Framework) kan de WdfTimerCreate-methode aanroepen om een timer met hoge resolutie te maken. In deze aanroep geeft het stuurprogramma een aanwijzer door aan een WDF_TIMER_CONFIG structuur als parameter. Als u een timer met hoge resolutie wilt maken, stelt het stuurprogramma het lid UseHighResolutionTimer van deze structuur in op TRUE. Dit lid maakt deel uit van de structuur die begint met Windows 8.1 en KMDF versie 1.13.
Nauwkeurigheid van timers beheren
Voor Windows op een x86-processor is het standaardinterval tussen systeemkloktekens doorgaans ongeveer 15 milliseconden en het minimale interval tussen systeemkloktekens is ongeveer 1 milliseconden. De verlooptijd van een timer met standaardresolutie (die ExAllocateTimer maakt als de vlag EX_TIMER_HIGH_RESOLUTION niet is ingesteld), kan dus alleen worden beheerd binnen ongeveer 15 milliseconden, maar de verlooptijd van een timer met een hoge resolutie kan binnen een milliseconde worden beheerd.
Als een stuurprogramma een relatieve verlooptijd voor een timer met standaardresolutie opgeeft, kan de timer maximaal 15 milliseconden eerder of later verlopen dan de opgegeven verlooptijd. Als een stuurprogramma een relatieve verlooptijd opgeeft voor een timer met een hoge resolutie, kan de timer zo laat verlopen als ongeveer een milliseconde na de opgegeven verlooptijd, maar het verloopt nooit vroeg. Zie Timernauwkeurigheid voor meer informatie over de relatie tussen systeemklokresolutie en timernauwkeurigheid.
Als er geen timers met een hoge resolutie zijn ingesteld, wordt de systeemklok doorgaans volgens de standaardsnelheid uitgevoerd. Als er echter een of meer timers met een hoge resolutie zijn ingesteld, moet het besturingssysteem mogelijk de systeemklok op maximale snelheid laten draaien gedurende ten minste een deel van de tijd voordat deze timers verlopen.
Om onnodig toegenomen energieverbruik te voorkomen, laat het besturingssysteem de systeemklok alleen op zijn maximale snelheid draaien wanneer dat nodig is om te voldoen aan de timingvereisten van timers met een hoge resolutie. Als een timer met een hoge resolutie bijvoorbeeld periodiek is en de periode meerdere standaard systeemkloktekens omvat, kan het besturingssysteem de systeemklok alleen op zijn maximale snelheid laten draaien in het deel van de timerperiode dat direct voorafgaat aan elke verloop. Voor de rest van de timer-periode draait de systeemklok op de standaardsnelheid.
Om overmatig energieverbruik te voorkomen, moeten stuurprogramma's voorkomen dat de periode van een langlopende timer met hoge resolutie wordt ingesteld op een waarde die kleiner is dan het standaardinterval tussen systeemkloktekens. Anders wordt het besturingssysteem gedwongen om de systeemklok continu met de maximale snelheid uit te voeren.
Vanaf Windows 8 kan een stuurprogramma de ExQueryTimerResolution-routine aanroepen om het bereik van timerresoluties te verkrijgen die worden ondersteund door de systeemklok.
Vergelijking met ExSetTimerResolution
Een stuurprogramma kan de ExSetTimerResolution-routine aanroepen om het tijdsinterval tussen opeenvolgende systeemklokonderbrekingen te wijzigen. Een stuurprogramma kan deze routine bijvoorbeeld aanroepen om de systeemklok te wijzigen van de standaardsnelheid naar de maximale snelheid om de nauwkeurigheid van de timer te verbeteren. Het gebruik van ExSetTimerResolution heeft echter verschillende nadelen vergeleken met het gebruik van timers met hoge resolutie die zijn gemaakt door ExAllocateTimer.
Eerst, nadat u ExSetTimerResolution hebt aangeroepen om de kloksnelheid van het systeem tijdelijk te verhogen, moet een stuurprogramma ExSetTimerResolution een tweede keer aanroepen om de systeemklok te herstellen naar de standaardsnelheid. Anders genereert de systeemkloktimer continu onderbrekingen met de maximale snelheid, wat overmatig energieverbruik kan veroorzaken.
Ten tweede kan een stuurprogramma dat gebruikmaakt van de ExSetTimerResolution-routine het tijdelijke gebruik van hogere systeemkloksnelheden niet zo effectief optimaliseren als het besturingssysteem doet voor timers met een hoge resolutie. De systeemklok draait dus meer tijd op de maximale snelheid dan strikt noodzakelijk is.
Ten derde, als meerdere stuurprogramma's gelijktijdig ExSetTimerResolution gebruiken om de nauwkeurigheid van de timer te verbeteren, kan de systeemklok gedurende lange perioden worden uitgevoerd met de maximale snelheid. In tegenstelling tot wat gebruikelijk is, zorgt het besturingssysteem wereldwijd voor de coördinatie van de werking van meerdere timers met een hoge resolutie, zodat de systeemklok alleen op de maximale snelheid draait als dat nodig is om te voldoen aan de vereisten op het gebied van timing van deze timers.
Ten slotte is het gebruik van ExSetTimerResolution inherent minder nauwkeurig dan het gebruik van een timer met hoge resolutie. Nadat een stuurprogramma ExSetTimerResolution heeft aangeroepen om de systeemklok te verhogen tot de maximale snelheid, wat meestal ongeveer een maatstreepje per milliseconde is, kan het stuurprogramma een routine zoals KeSetTimerEx aanroepen om de timer in te stellen. Als het stuurprogramma in deze aanroep een relatieve verlooptijd opgeeft, kan de timer tot ongeveer een milliseconden eerder dan of later verlopen dan de opgegeven verlooptijd. Als echter een relatieve verlooptijd is opgegeven voor een timer met een hoge resolutie, kan de timer tot ongeveer een milliseconde later verlopen dan de opgegeven verlooptijd, maar deze verloopt nooit vroeg.