Bagikan melalui


Waktu Interupsi

Waktu interupsi adalah jumlah waktu sejak sistem terakhir dimulai, dalam interval 100 nanodetik. Jumlah interupsi-waktu dimulai pada nol ketika sistem dimulai dan bertambah pada setiap jam yang terganggu oleh panjang jam centang. Panjang tick jam yang tepat tergantung pada perangkat keras yang mendasar dan dapat bervariasi di antara sistem.

Tidak seperti waktu sistem, jumlah interupsi-waktu tidak tunduk pada penyesuaian oleh pengguna atau layanan waktu Windows, menjadikannya pilihan yang lebih baik untuk mengukur durasi singkat. Aplikasi yang membutuhkan presisi yang lebih besar daripada jumlah waktu interupsi harus menggunakan timer resolusi tinggi. Gunakan fungsi QueryPerformanceFrequency untuk mengambil frekuensi timer resolusi tinggi dan fungsi QueryPerformanceCounter untuk mengambil nilai penghitung.

Fungsi QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTime, dan QueryUnbiasedInterruptTimePrecise dapat digunakan untuk mengambil jumlah interrupt-time. Waktu interupsi yang tidak bias berarti bahwa hanya waktu yang dihitung sistem dalam keadaan kerja—oleh karena itu, jumlah interupsi-waktu tidak "bias" pada waktu yang dihabiskan sistem dalam tidur atau hibernasi.

Windows Server 2008, Windows Vista, Windows Server 2003 dan Windows XP/2000: Fungsi QueryUnbiasedInterruptTime tersedia dimulai dengan Windows 7 dan Windows Server 2008 R2.

Resolusi timer yang ditetapkan oleh fungsi timeBeginPeriod dan timeEndPeriod memengaruhi resolusi fungsi QueryInterruptTime dan QueryUnbiasedInterruptTime . Namun, meningkatkan resolusi timer tidak disarankan karena dapat mengurangi performa sistem secara keseluruhan dan meningkatkan konsumsi daya dengan mencegah prosesor memasuki status penghematan daya. Sebagai gantinya, aplikasi harus menggunakan timer resolusi tinggi.

Catatan

Fungsi QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTime, dan QueryUnbiasedInterruptTimePrecise menghasilkan hasil yang berbeda pada build Windows debug ("diperiksa"), karena jumlah interupsi-waktu dan jumlah centang ditingkatkan sekitar 49 hari. Ini membantu mengidentifikasi bug yang mungkin tidak terjadi sampai sistem telah berjalan untuk waktu yang lama. Build yang dicentang tersedia untuk pelanggan MSDN melalui situs Web Microsoft Developer Network (MSDN ).

 

Contoh berikut menunjukkan cara mengambil jumlah interrupt-time dengan memanggil fungsi QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTime, dan QueryUnbiasedInterruptTimePrecise . Tautkan ke pustaka OneCore.lib saat Anda membangun aplikasi konsol yang memanggil fungsi-fungsi ini.

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

Untuk mengambil waktu yang berlalu yang memperhitungkan tidur atau hibernasi, gunakan fungsi GetTickCount atau GetTickCount64 , atau gunakan penghitung kinerja Waktu Aktif Sistem. Penghitung kinerja ini dapat diambil dari data performa di kunci registri HKEY_PERFORMANCE_DATA. Nilai yang dikembalikan adalah nilai 8-byte. Untuk informasi selengkapnya, lihat Penghitung Performa.

QueryInterruptTime

QueryInterruptTimePrecise

QueryUnbiasedInterruptTime

QueryUnbiasedInterruptTimePrecise

timeBeginPeriod

timeEndPeriod