Onderbrekingstijd
Onderbrekingstijd de hoeveelheid tijd is sinds het systeem voor het laatst is gestart, in intervallen van 100 nanoseconden. Het aantal onderbrekingstijden begint bij nul wanneer het systeem wordt gestart en bij elke klokonderbreken wordt verhoogd door de lengte van een kloktik. De exacte lengte van een kloktik hangt af van de onderliggende hardware en kan variƫren tussen systemen.
In tegenstelling tot systeemtijd, is het aantal onderbrekingstijd niet onderhevig aan aanpassingen door gebruikers of de Windows Time-service, waardoor het een betere keuze is voor het meten van korte duur. Toepassingen waarvoor meer precisie is vereist dan het aantal onderbrekingstijden, moeten gebruikmaken van een timer voor hoge resolutie. Gebruik de functie QueryPerformanceFrequency om de frequentie van de timer met hoge resolutie en de functie QueryPerformanceCounter op te halen om de waarde van de teller op te halen.
De QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTimeen Functies QueryUnbiasedInterruptTimePrecise kunnen worden gebruikt om het aantal onderbrekingstijden op te halen. Niet-bevooroordeelde onderbrekingstijd betekent dat alleen de tijd die het systeem in de werktoestand heeft, wordt geteld. Het aantal onderbrekingstijden is dus niet 'vertekend' door tijd die het systeem in de slaapstand of sluimerstand doorbrengt.
Windows Server 2008, Windows Vista, Windows Server 2003 en Windows XP/2000: De functie QueryUnbiasedInterruptTime is beschikbaar vanaf Windows 7 en Windows Server 2008 R2.
De timerresolutie die is ingesteld door de functies timeBeginPeriod en timeEndPeriod, is van invloed op de resolutie van de functies QueryInterruptTime en QueryUnbiasedInterruptTime. Het verhogen van de timerresolutie wordt echter niet aanbevolen omdat het de algehele systeemprestaties kan verminderen en het energieverbruik kan verhogen door te voorkomen dat de processor energiebesparende statussen invoert. In plaats daarvan moeten toepassingen een timer met hoge resolutie gebruiken.
Notitie
De QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTimeen QueryUnbiasedInterruptTimePrecise functies produceert verschillende resultaten voor foutopsporing ('checked')-builds van Windows, omdat het aantal onderbrekingstijd en het aantal tikken met ongeveer 49 dagen zijn gevorderd. Dit helpt bij het identificeren van fouten die zich mogelijk pas voordoen als het systeem al lange tijd wordt uitgevoerd.
In het volgende voorbeeld ziet u hoe u het aantal onderbrekingstijden ophaalt door de QueryInterruptTime-aan te roepen, QueryInterruptTimePrecise, QueryUnbiasedInterruptTimeen QueryUnbiasedInterruptTimePrecise functies. Maak een koppeling naar de Bibliotheek OneCore.lib wanneer u een consoletoepassing bouwt die deze functies aanroept.
#include "stdafx.h"
#include <windows.h>
#include <realtimeapiset.h>
void InterruptTimeTest()
{
ULONGLONG InterruptTime;
ULONGLONG PreciseInterruptTime;
ULONGLONG UnbiasedInterruptTime;
ULONGLONG PreciseUnbiasedInterruptTime;
// The interrupt time that QueryInterruptTime reports is based on the
// latest tick of the system clock timer. The system clock timer is
// the hardware timer that periodically generates interrupts for the
// system clock. The uniform period between system clock timer
// interrupts is referred to as a system clock tick, and is typically
// in the range of 0.5 milliseconds to 15.625 milliseconds, depending
// on the hardware platform. The interrupt time value retrieved by
// QueryInterruptTime is accurate within a system clock tick.
QueryInterruptTime(&InterruptTime);
printf("Interrupt time: %.7f seconds\n",
(double)InterruptTime/(double)10000000);
// Precise interrupt time is more precise than the interrupt time that
// QueryInterruptTime reports because the functions that report
// precise interrupt time read the timer hardware directly.
QueryInterruptTimePrecise(&PreciseInterruptTime);
printf("Precise interrupt time: %.7f seconds\n",
(double)PreciseInterruptTime/(double)10000000);
// Unbiased interrupt time means that only time that the system is in
// the working state is counted. Therefore, the interrupt-time count
// is not biased by time the system spends in sleep or hibernation.
QueryUnbiasedInterruptTime(&UnbiasedInterruptTime);
printf("Unbiased interrupt time: %.7f seconds\n",
(double)UnbiasedInterruptTime/(double)10000000);
// QueryUnbiasedInterruptTimePrecise gets an interrupt-time count
// that is both unbiased and precise, as defined in the comments
// included earlier in this example.
QueryUnbiasedInterruptTimePrecise(&PreciseUnbiasedInterruptTime);
printf("Precise unbiased interrupt time: %.7f seconds\n",
(double)PreciseUnbiasedInterruptTime/(double)10000000);
}
int main(void)
{
void InterruptTimeTime();
InterruptTimeTest();
return(0);
}
Gebruik de GetTickCount- of GetTickCount64 of gebruik de prestatiemeteritem System Up Time om verstreken tijd op te halen die accounts voor slaapstand of sluimerstand. Deze prestatiemeteritem kan worden opgehaald uit de prestatiegegevens in de registersleutel HKEY_PERFORMANCE_DATA. De geretourneerde waarde is een 8-bytewaarde. Zie Prestatiemeteritemsvoor meer informatie.
Verwante onderwerpen