Hodnota čítače výkonu může neočekávaně leap vpřed

Překlady článku Překlady článku
ID článku: 274323 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Výsledek vrácený funkcí QueryPerformanceCounter může neočekávaně vpřed čas od času leap. Tento přestupném může představovat několik sekund.

Příčina

K tomuto problému dochází z důvodu chyba návrhu v propojení periferní součást (PCI) Industry Standard Architecture (ISA) most některé chipsets. Tento most je běžně nazývá Jižní most. Skok dochází velkém zatížení sběrnice PCI, obdrží operačního systému řady neočekávané výsledky ze mostu. Operační systém rozpozná neočekávané výsledky a vypočítá částku přidat čítač výkonu. To způsobí, že vrácené výsledek z QueryPerformanceCounter přejít vpřed.

Řešení

Programy byste sledovat porovnáním změnu v čase jako určena následné volání QueryPerformanceCounter s změnu v čase jako určena následné volání funkce GetTickCount pro neočekávané přeskakování. Pokud významná skoku, který je založen na (QueryPerformanceCounter), ale žádné podobné zvýšení základě GetTickCount, potom může být předpokládá, že čítač výkonu právě protihráčův vpřed. Na konci tohoto článku ukázka kódu demonstruje učinit.

Prohlášení

Operační systém chování je záměrné. Operační systém získává nespolehlivých dat z sadě čipů je nezbytné úpravy čítače výkonu.

Další informace

Vady návrhu v rámci hardwarového čipu jsou známé jako čárce. Tyto nedostatky v návrhu způsobit odlišovat od publikované specifikace produktu. Informace na čárce konkrétní chipsets obraťte na dodavatele hardwaru sadě čipů.

Do počítače PCI součásti jsou identifikovány PCI identifikátor v rámci následujícího klíče v registru systému Windows:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI
Názvy podklíčů mají následující formulář
VEN_ xxxx & DEV_rrrr & SUBSYS_aaaaaaaa & REV_bb
kde xxxx: rrrr představuje identifikátor PCI.

Čipy s následující identifikátory PCI, aktuálně jsou známy vykazují skoku hodnota čítače výkonu:
Zmenšit tuto tabulkuRozšířit tuto tabulku
PCI IDDodavatel hardwaru
1039:0530Integrovaná Silicon Systems (SiS)
1039:0620Integrovaná Silicon Systems (SiS)
10B9:0533Acer Labs, Inc. (ALi)
10B9:1533Acer Labs, Inc. (ALi)
1106:0596VIA Technologies, Inc. (VIA)
1106:0686VIA Technologies, Inc. (VIA)
1166:004FCorporation serverworks
1166:0050Corporation serverworks
8086:7110Intel Corporation
Tento seznam bude aktualizován, jako je Microsoft přechodech chování v jiných chipsets.

Ukázkový kód

Následující ukázkový kód demonstruje metody popsané výše pro zjištění leaps čítače výkonu. Pokud je kód spuštěn v počítači s čipovou sadou PIIX4, například tato aplikace konzoly sporadicky ohlásí leaps hodnota čítače výkonu.
#include <windows.h>
#include <stdio.h>

void main() {

   LARGE_INTEGER liFrequency;
   LARGE_INTEGER liCurrent;
   LARGE_INTEGER liLast;
   LARGE_INTEGER liRecent[10];
   DWORD dwCurrent;
   DWORD dwLast;
   DWORD dwPerfElapsed;
   DWORD dwTickElapsed;
   int i = 0;
   int j;

   // Save the performance counter frequency for later use.
   if (!QueryPerformanceFrequency(&liFrequency))
      printf("QPF() failed with error %d\n", GetLastError());

   // Query the performance counter value and tick count.
   dwCurrent = GetTickCount();
   if (!QueryPerformanceCounter(&liCurrent))
      printf("QPC() failed with error %d\n", GetLastError());

   liLast = liCurrent;
   dwLast = dwCurrent;

   while (TRUE) {

      // Query the performance counter value and tick count.
      if (!QueryPerformanceCounter(&liCurrent))
         printf("QPC() failed with error %d\n", GetLastError());
      dwCurrent = GetTickCount();

      // Store the performance counter value in the list of recent values.
      liRecent[i].QuadPart = liCurrent.QuadPart;
      i = (i+1) % 10;

      // Convert difference in performance counter values to milliseconds.
      dwPerfElapsed = (DWORD) (((liCurrent.QuadPart - liLast.QuadPart) 
            * 1000) / liFrequency.QuadPart);
      
      dwTickElapsed = dwCurrent - dwLast;

      // Check for a discrepancy greater than 500 milliseconds.
      if (abs(dwPerfElapsed - dwTickElapsed) > 500) { 

         // Print the previous 9 performance-counter values.
         for (j=9; j>0; j--) {
            printf("      Previous %d:  %I64X\n", j, liRecent[i].QuadPart);
            i = (i+1) % 10;
         }

         // Print the leap value.
         printf( "LEAP: Current:     %I64X  delta = %I64X\n", 
               liCurrent.QuadPart, liCurrent.QuadPart - liLast.QuadPart);
         
         // Retrieve and print the next 9 performance-counter values.
         for (j=1; j<=9; j++) {
            
            QueryPerformanceCounter(&liCurrent);
            printf("      Next     %d:  %I64X\n", j, liCurrent.QuadPart);
            
            liRecent[i].QuadPart = liCurrent.QuadPart;
            i = (i+1) % 10;
         }

         printf("\n");
      }

      liLast = liCurrent;
      dwLast = dwCurrent;
   }

   return;
}

Vlastnosti

ID článku: 274323 - Poslední aktualizace: 21. listopadu 2006 - Revize: 3.1
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Win32 Application Programming Interface
Klíčová slova: 
kbmt kbapi kbkernbase kbperfmon kbprb KB274323 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:274323
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com