Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
czas przerwania jest ilością czasu od czasu ostatniego uruchomienia systemu w odstępach 100 nanosekund. Liczba godzin przerwań zaczyna się od zera, gdy system uruchamia się i jest zwiększany przy każdym przerwaniu zegara przez długość znacznika zegara. Dokładna długość znacznika zegara zależy od sprzętu bazowego i może się różnić między systemami.
W przeciwieństwie do czasu systemowego, licznik czasu przerwania nie podlega korektom przez użytkowników lub usługę czasu systemu Windows, co czyni go lepszym wyborem do mierzenia krótkich czasów trwania. Aplikacje, które wymagają większej dokładności niż licznik czasu przerwania, powinny używać czasomierza o wysokiej rozdzielczości . Użyj funkcji QueryPerformanceFrequency, aby pobrać częstotliwość czasomierza o wysokiej rozdzielczości oraz funkcję QueryPerformanceCounter, aby pobrać wartość licznika.
QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTimei QueryUnbiasedInterruptTimePrecise funkcji można pobrać liczbę czasu przerwania. Bezstronny czas przerwania oznacza, że tylko czas, w jaki system jest w stanie roboczym, jest liczone — w związku z tym licznik czasu przerwania nie jest "stronniczy" przez czas, jaki system spędza w stanie uśpienia lub hibernacji.
Windows Server 2008, Windows Vista, Windows Server 2003 i Windows XP/2000: Funkcja QueryUnbiasedInterruptTime jest dostępna od systemów Windows 7 i Windows Server 2008 R2.
Rozpoznawanie czasomierza ustawione przez timeBeginPeriod i timeEndPeriod funkcji wpływa na rozdzielczośćQueryInterruptTime i QueryUnbiasedInterruptTime. Jednak zwiększenie rozdzielczości czasomierza nie jest zalecane, ponieważ może zmniejszyć ogólną wydajność systemu i zwiększyć zużycie energii, uniemożliwiając procesorowi wprowadzanie stanów oszczędzania energii. Zamiast tego aplikacje powinny używać czasomierza o wysokiej rozdzielczości.
Nuta
QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTimei QueryUnbiasedInterruptTimePrecise funkcje generują różne wyniki w kompilacjach debugowania ("zaznaczone") systemu Windows, ponieważ licznik czasu przerwania i liczba znaczników są zaawansowane o około 49 dni. Pomaga to zidentyfikować usterki, które mogą nie wystąpić, dopóki system nie będzie działać przez długi czas.
W poniższym przykładzie pokazano, jak pobrać liczbę czasu przerwania, wywołując QueryInterruptTime, QueryInterruptTimePrecise, QueryUnbiasedInterruptTimei QueryUnbiasedInterruptTimePrecise. Połącz się z biblioteką OneCore.lib podczas tworzenia aplikacji konsolowej, która wywołuje te funkcje.
#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);
}
Aby pobrać czas, który upłynął, że konta uśpienia lub hibernacji, użyj GetTickCount lub funkcji GetTickCount64 lub użyj licznika wydajności Czasu działania systemu. Ten licznik wydajności można pobrać z danych wydajności w kluczu rejestru HKEY_PERFORMANCE_DATA. Zwracana wartość jest wartością 8-bajtową. Aby uzyskać więcej informacji, zobacz liczniki wydajności.
Tematy pokrewne