Aracılığıyla paylaş


Kesme Zamanı

Kesme süresi, sistemin en son başlatılmasından bu yana geçen 100 nanosaniyelik aralıklarla geçen süredir. Kesme zamanı sayısı, sistem başlatıldığında sıfırdan başlar ve her saat kesmesinde bir saat diliminin uzunluğuna göre artırılır. Saat çizgisinin tam uzunluğu, temel alınan donanıma bağlıdır ve sistemler arasında farklılık gösterebilir.

sistem süresinden farklı olarak, kesme zamanı sayısı kullanıcılar veya Windows saat hizmeti tarafından yapılan ayarlamalara tabi değildir, bu da kısa süreleri ölçmek için daha iyi bir seçimdir. Kesme süresi sayımından daha fazla duyarlık gerektiren uygulamalar yüksek çözünürlüklü bir zamanlayıcı kullanmalıdır. Yüksek çözünürlüklü zamanlayıcının sıklığını almak için QueryPerformanceFrequencyişlevini ve sayacın değerini almak için QueryPerformanceCounterişlevinikullanın.

QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTimeve QueryUnbiasedInterruptTimePrecise işlevleri kesme zamanı sayısını almak için kullanılabilir. Sapmasız kesme süresi, sistemin yalnızca çalışma durumunda olduğu sürenin sayılmış olduğu anlamına gelir; bu nedenle, sistemin uyku veya hazırda beklemede geçirdiği zamana göre kesme süresi sayısı "sapmalı" değildir.

Windows Server 2008, Windows Vista, Windows Server 2003 ve Windows XP/2000:QueryUnbiasedInterruptTime işlevi Windows 7 ve Windows Server 2008 R2'den itibaren kullanılabilir.

timeBeginPeriod ve timeEndPeriod işlevleri tarafından ayarlanan zamanlayıcı çözünürlüğü, QueryInterruptTime çözünürlüğünü ve QueryUnbiasedInterruptTimeişlevlerinietkiler. Ancak, işlemcinin güç tasarrufu durumlarını girmesini engelleyerek genel sistem performansını düşürebileceği ve güç tüketimini artırabileceğinden zamanlayıcı çözünürlüğünün artırılması önerilmez. Bunun yerine, uygulamalar yüksek çözünürlüklü bir zamanlayıcı kullanmalıdır.

Not

QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTimeve QueryUnbiasedInterruptTimePrecise işlevleri, windows'un hata ayıklama ("işaretli") derlemelerinde farklı sonuçlar üretir çünkü kesme zamanı sayısı ve değer sayısı yaklaşık 49 gün ilerletilir. Bu, sistem uzun süredir çalışana kadar oluşabilecek hataları tanımlamaya yardımcı olur.

 

Aşağıdaki örnekte, QueryInterruptTimeQueryInterruptTimePrecise,QueryUnbiasedInterruptTimeve QueryUnbiasedInterruptTimePrecise işlevlerini çağırarak kesme zamanı sayısının nasıl alındığı gösterilmektedir. Bu işlevleri çağıran bir konsol uygulaması oluşturduğunuzda OneCore.lib kitaplığına bağlanın.

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

Uyku veya hazırda bekleme süresini hesaplayan geçen süreyi almak için GetTickCountveya GetTickCount64işleviniya da System Up Time performans sayacını kullanın. Bu performans sayacı, HKEY_PERFORMANCE_DATAkayıt defteri anahtarındaki performans verilerinden alınabilir. Döndürülen değer 8 baytlık bir değerdir. Daha fazla bilgi için bkz. Performans Sayaçları.

QueryInterruptTime

QueryInterruptTimePrecise

QueryUnbiasedInterruptTime

QueryUnbiasedInterruptTimePrecise

zamanBeginPeriod

timeEndPeriod