다음을 통해 공유


인터럽트 시간

인터럽트 시간은 시스템이 마지막으로 시작된 이후의 시간(100나노초 간격)입니다. 인터럽트 시간 수는 시스템이 시작될 때 0에서 시작하여 클록 틱의 길이에 따라 각 클록 인터럽트에서 증가합니다. 클록 틱의 정확한 길이는 기본 하드웨어에 따라 달라지며 시스템마다 다를 수 있습니다.

시스템 시간과 달리 인터럽트 시간 수는 사용자 또는 Windows 시간 서비스의 조정을 받지 않으므로 짧은 기간을 측정하는 것이 더 좋습니다. 인터럽트 시간 수보다 정밀도가 높은 애플리케이션은 고해상도 타이머사용해야 합니다. QueryPerformanceFrequency 함수를 사용하여 고해상도 타이머의 빈도를 검색하고 QueryPerformanceCounter 함수를 사용하여 카운터 값을 검색합니다.

QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTimeQueryUnbiasedInterruptTimePrecise 함수를 사용하여 인터럽트 시간 수를 검색할 수 있습니다. 비편향 인터럽트 시간은 시스템이 작업 상태에 있는 시간만 계산됨을 의미하므로 시스템이 절전 모드 또는 최대 절전 모드에서 소비하는 시간에 따라 인터럽트 시간 수가 "편향"되지 않습니다.

Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP/2000: QueryUnbiasedInterruptTime 함수는 Windows 7 및 Windows Server 2008 R2부터 사용할 수 있습니다.

timeBeginPeriodtimeEndPeriod 함수로 설정된 타이머 해상도는 QueryInterruptTimeQueryUnbiasedInterruptTime 함수의 해상도에 영향을 줍니다. 그러나 프로세서가 절전 상태로 들어가지 못하게 하여 전체 시스템 성능을 줄이고 전력 소비를 늘릴 수 있으므로 타이머 해상도를 높이는 것은 권장되지 않습니다. 대신 애플리케이션은 고해상도 타이머를 사용해야 합니다.

참고 항목

QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTimeQueryUnbiasedInterruptTimePrecise 함수는 인터럽트 시간 수 및 틱 수가 약 49일 정도 진행되므로 Windows의 디버그("checked") 빌드에서 다른 결과를 생성합니다. 이렇게 하면 시스템이 오랫동안 실행될 때까지 발생하지 않을 수 있는 버그를 식별할 수 있습니다.

 

다음 예제에서는 QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTime 및 QueryUnbiasedInterruptTimePrecise 함수를 호출하여 인터럽트 시간 수를 검색하는 방법을 보여 줍니다. 이러한 함수를 호출하는 콘솔 애플리케이션을 빌드할 때 OneCore.lib 라이브러리에 연결합니다.

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

절전 또는 최대 절전 모드를 고려하는 경과된 시간을 검색하려면 GetTickCount 또는 GetTickCount64 함수를 사용하거나 시스템 작동 시간 성능 카운터를 사용합니다. 이 성능 카운터는 레지스트리 키 HKEY_PERFORMANCE_DATA 성능 데이터에서 검색할 수 있습니다. 반환되는 값은 8 바이트 값입니다. 자세한 내용은 성능 카운터를 참조하세요.

QueryInterruptTime

QueryInterruptTimePrecise

QueryUnbiasedInterruptTime

QueryUnbiasedInterruptTimePrecise

timeBeginPeriod

timeEndPeriod