Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En systemtimerrutin gör vanligtvis att anroparen kan ange antingen en absolut eller relativ förfallotid för en timer. Se till exempel KeWaitForSingleObject, KeSetTimer eller KeDelayExecutionThread. Noggrannheten med vilken operativsystemet kan mäta förfallotider begränsas av systemklockans kornighet.
Systemtiden uppdateras vid varje tick i systemklockan och är endast korrekt för den senaste ticken. Om anroparen anger en absolut förfallotid identifieras förfallotiden för timern under bearbetningen av den första systemklockans tick som inträffar efter den angivna tiden. Därför kan timern förfalla så mycket som en systemklockaperiod senare än den angivna absoluta förfallotiden. Om ett tidsintervall eller relativ förfallotid anges i stället kan förfallotiden ske upp till en period tidigare än eller en period senare än den angivna tiden, beroende på var exakt start- och sluttiderna för detta intervall hamnar mellan systemklockans tick. Oavsett om en absolut eller relativ tid har angetts kan det hända att timerns förfallotid inte identifieras förrän ännu senare om avbrottsbearbetningen för systemklockan fördröjs av avbrottsbearbetning för andra enheter.
När anroparen anger en relativ förfallotid lägger tidsrutinen till den aktuella systemklockatiden till den angivna relativa förfallotiden för att beräkna den absoluta förfallotid som ska användas för timern. Eftersom systemtiden endast är korrekt för den senaste ticken på systemklockan kan den beräknade förfallotiden vara upp till en systemklockaperiod tidigare än den förfallotid som anroparen förväntar sig. Om en angiven relativ förfallotid är nära eller mindre än systemets klockperiod kan timern upphöra omedelbart, utan fördröjning.
Ett möjligt sätt att mer exakt stödja kortare förfallotider är att minska tiden mellan systemklockans tick, men att göra det kommer sannolikt att öka energiförbrukningen. Dessutom kan en minskning av systemklockans period inte på ett tillförlitligt sätt uppnå en finare granularitet för systemklockan om inte avbrottsbearbetning för andra enheter på plattformen kan garanteras att inte fördröjer bearbetningen av systemklockans avbrott.
Från och med Windows 8 använder KeDelayExecutionThread en mer exakt teknik för att beräkna den absoluta förfallotiden från en angiven relativ förfallotid. För att få en mer exakt uppskattning av den aktuella systemtiden använder rutinen systemprestandaräknaren för att mäta den tid som förflutit sedan den senaste systemklockan tickade. Därefter lägger rutinen till den här mer exakta uppskattningen av systemtiden till den relativa förfallotiden för att beräkna den absoluta förfallotiden. Den absoluta förfallotid som beräknas med den här tekniken är korrekt inom en mikrosekunder. Det innebär att timern inte upphör att gälla innan den angivna relativa förfallotiden förflutit. Timern kan fortfarande löpa ut upp till en systemklockans period senare än den angivna tiden och kan löpa ut ännu senare om hanteringen av systemklockans avbrott dröjer på grund av avbrottshantering för andra enheter.
Om systemtiden ändras innan en timer upphör att gälla påverkas inte en relativ timer, men systemet justerar varje absolut timer. En relativ timer upphör alltid att gälla efter det angivna antalet tidsenheter som förflutit, oavsett den absoluta systemtiden. En absolut timer upphör att gälla vid en viss systemtid, så en ändring i systemtiden ändrar väntetiden för en absolut timer.