Leistungsindikatorwert möglicherweise unerwartet vorwärts dar.

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 274323 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Das Ergebnis, das von der QueryPerformanceCounter -Funktion zurückgegeben wird möglicherweise unerwartet Weiterleiten von Zeit zu Zeit dar. Dieser Sprung kann mehrere Sekunden darstellen.

Ursache

Dieses Problem tritt infolge eines einen Mangel Entwurf peripheral Component Interconnect (PCI) Brücke von einigen Chipsätzen ISA (Industry Standard Architecture). Dieser Brücke wird häufig als der South Bridge bezeichnet. Der Sprung tritt unter einer Überlastung der PCI-Bus, wenn das Betriebssystem eine Reihe von unerwartete Ergebnisse von der Brücke empfängt. Das Betriebssystem erkennt unerwartete Ergebnisse und berechnet einen Betrag um den Leistungsindikator hinzuzufügen. Dadurch wird das zurückgegebene Ergebnis von QueryPerformanceCounter Vorwärts springen.

Lösung

Programme sollten für ein unerwartetes Sprung achten, durch die Änderung durch aufeinander folgende Aufrufe von QueryPerformanceCounter mit der Änderung in der Zeit durch aufeinander folgende Aufrufe an die GetTickCount -Funktion bestimmt bestimmt Zeit vergleichen. Ist eine erhebliche springen, die auf QueryPerformanceCounter (), aber keine ähnlichen erhöhen, die auf GetTickCount basiert basiert, kann dann davon ausgegangen, dass der Leistungsindikator nur vorwärts übersprungen. Der Beispielcode am Ende dieses Artikels veranschaulicht, wie dies tun.

Status

Dieses Betriebssystem Verhalten ist beabsichtigt. Die Leistung Leistungsindikator Anpassung ist erforderlich, wenn das Betriebssystem aus dem Chipsatz unzuverlässige Daten erhält.

Weitere Informationen

Design-Fehlern in einem Hardwarechip werden als Errata bezeichnet. Dieser Entwurf Mängel möglicherweise das Produkt von veröffentlichten Spezifikationen abweichen. Informationen auf Errata in bestimmten Chipsets erhalten Sie den Hersteller der Hardware für den Chipsatz.

Einen Computer PCI-Komponenten werden durch eine PCI-Kennung in den folgenden Schlüssel in der Windows-Registrierung identifiziert:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI
Die Namen der Unterschlüssel haben das folgende Formular
VEN_ Xxxx & DEV_ JJJJ & SUBSYS_ Aaaaaaaa & REV_bb
wobei Xxxx : Yyyy stellt den PCI-Bezeichner dar.

Derzeit sind Chips mit folgenden PCI-Bezeichner an einen Leistungsindikatorwert-Sprung bekannt:
Tabelle minimierenTabelle vergrößern
PCI-IDHardware-Hersteller
1039:0530Silicon Integrated Systems (SiS)
1039:0620Silicon Integrated Systems (SiS)
10B9:0533Acer Labs, Inc. (ALi)
10B9:1533Acer Labs, Inc. (ALi)
1106:0596VIA Technologies, Inc. (VIA)
1106:0686VIA Technologies, Inc. (VIA)
1166:004FServerworks Corporation
1166:0050Serverworks Corporation
8086:7110Intel
Dieser Liste werden aktualisiert, wie Microsoft das Verhalten in anderen Chipsets beobachtet.

Beispielcode

Der folgende Beispielcode veranschaulicht die oben beschriebene zum Erkennen von Leistung Leistungsindikator Leaps-Methode. Wenn der Code auf einem Computer mit dem Chipsatz PIIX4 ausgeführt wird, z. B. meldet diese Konsolenanwendung sporadisch Leaps in der Leistung Leistungsindikator.
#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;
}

Eigenschaften

Artikel-ID: 274323 - Geändert am: Dienstag, 21. November 2006 - Version: 3.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Win32 Application Programming Interface
Keywords: 
kbmt kbapi kbkernbase kbperfmon kbprb KB274323 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 274323
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

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