Dela via


Avbrottstid

Avbrottstid är hur lång tid som gått sedan systemet startades senast, inom 100 nanosekunder. Antalet avbrottstid börjar vid noll när systemet startar och ökas vid varje klockavbrott med längden på ett klockfäste. Den exakta längden på ett klockfäste beror på underliggande maskinvara och kan variera mellan olika system.

Till skillnad från systemtidär antalet avbrott inte föremål för justeringar av användare eller Windows-tidstjänsten, vilket gör det till ett bättre val för att mäta korta varaktigheter. Program som kräver större precision än antalet avbrottstid bör använda en högupplösningstimer. Använd funktionen QueryPerformanceFrequency för att hämta frekvensen för timern med hög upplösning och funktionen QueryPerformanceCounter för att hämta räknarens värde.

Funktionerna QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTimeoch QueryUnbiasedInterruptTimePrecise kan användas för att hämta antalet avbrottstid. Objektiv avbrottstid innebär att endast tid som systemet är i arbetstillstånd räknas – därför är antalet avbrottstid inte "partiskt" efter den tid systemet tillbringar i viloläge eller viloläge.

Windows Server 2008, Windows Vista, Windows Server 2003 och Windows XP/2000: Funktionen QueryUnbiasedInterruptTime är tillgänglig från och med Windows 7 och Windows Server 2008 R2.

Den timermatchning som anges av funktionerna timeBeginPeriod och timeEndPeriod påverkar upplösningen för funktionerna QueryInterruptTime och QueryUnbiasedInterruptTime. Att öka timerupplösningen rekommenderas dock inte eftersom det kan minska systemets övergripande prestanda och öka energiförbrukningen genom att förhindra att processorn kommer in i energispartillstånd. I stället bör program använda en timer med hög upplösning.

Not

QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTimeoch QueryUnbiasedInterruptTimePrecise-funktionerna ger olika resultat vid felsökning ("checkad") versioner av Windows, eftersom antalet avbrottstid och antal tick avanceras med cirka 49 dagar. Detta hjälper till att identifiera buggar som kanske inte inträffar förrän systemet har körts under en lång tid.

 

I följande exempel visas hur du hämtar antalet avbrottstid genom att anropa QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTimeoch QueryUnbiasedInterruptTimePrecise functions. Länka till OneCore.lib-biblioteket när du skapar ett konsolprogram som anropar dessa funktioner.

#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);
}

Om du vill hämta förfluten tid som står för viloläge eller viloläge använder du funktionen GetTickCount eller GetTickCount64 eller använder prestandaräknaren System Up Time. Den här prestandaräknaren kan hämtas från prestandadata i registernyckeln HKEY_PERFORMANCE_DATA. Värdet som returneras är ett värde på 8 byte. Mer information finns i prestandaräknare.

QueryInterruptTime

QueryInterruptTimePrecise

QueryUnbiasedInterruptTime

QueryUnbiasedInterruptTimePrecise

timeBeginPeriod

timeEndPeriod