Valore del contatore delle prestazioni in modo imprevisto potrebbe bisestili Avanti

Traduzione articoli Traduzione articoli
Identificativo articolo: 274323 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Il risultato viene restituito dalla funzione QueryPerformanceCounter potrebbe essere inaspettatamente bisestili avanti di tanto in tanto. Questo bisestile pu˛ rappresentare diversi secondi.

Cause

Questo problema si verifica a causa di un difetto di progettazione del peripheral component interconnect (PCI) per bridge di ISA (Industry Standard Architecture) di alcuni chipset. Questo ponte Ŕ comunemente detto il bridge Sud . Il collegamento si verifica in un elevato carico del bus PCI, quando il sistema operativo riceve una serie di risultati non previsti dal bridge di. Il sistema operativo rileva risultati imprevisti e consente di calcolare un importo per aggiungere il contatore delle prestazioni. In questo modo il risultato restituito da QueryPerformanceCounter per spostarsi in avanti.

Risoluzione

Programmi opportuno prevedere per un salto imprevisto confrontando la variazione nel tempo come determinato dalle chiamate successive a QueryPerformanceCounter con la modifica nel tempo, come determinato dalle chiamate successive alla funzione GetTickCount . Se Ŕ presente un rimando significativo che si basa () QueryPerformanceCounter , ma non aumentano simile in cui si basa GetTickCount , quindi Ŕ possibile presupporre che il contatore delle prestazioni solo a saltati Avanti. Nell'esempio di codice alla fine di questo articolo viene illustrato come eseguire questa operazione.

Status

Un comportamento di questo sistema operativo legato alla progettazione. La rettifica del contatore delle prestazioni Ŕ necessaria quando il sistema operativo Ottiene i dati non affidabili dal chipset non gestito.

Informazioni

Difetti di progettazione all'interno di un chip hardware sono noti come agli errori indicati stepping. Questi difetti di progettazione potrebbero causare il prodotto scostarsi dalle specifiche pubblicate. Per informazioni su agli errori indicati stepping in un chipset specifico, contattare il produttore dell'hardware per il chipset.

Componenti di un computer PCI sono identificati da un identificatore PCI nella seguente chiave nel Registro di sistema:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI
I nomi delle sottochiavi hanno il seguente formato
VEN_ xxxx & DEV_ aaaa & SUBSYS_ aaaaaaaa & REV_bb
in cui xxxx : aaaa rappresenta l'identificatore PCI.

Attualmente, chip con gli identificatori PCI riportati di seguito sono noti per presentare un cambiamento di valore del contatore delle prestazioni:
Riduci questa tabellaEspandi questa tabella
ID PCIFornitore di hardware
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:004FCorporation ServerWorks
1166:0050Corporation ServerWorks
8086:7110Intel Corporation
Questo elenco verrÓ aggiornato come Microsoft osserva il comportamento in altri chipset.

Codice di esempio

Nell'esempio di codice riportato di seguito viene illustrato il metodo descritto in precedenza per il rilevamento leaps del contatore delle prestazioni. Se il codice viene eseguito in un computer con il chipset PIIX4, ad esempio, questa applicazione console occasionalmente segnalerÓ leaps nel valore del contatore delle prestazioni.
#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;
}

ProprietÓ

Identificativo articolo: 274323 - Ultima modifica: martedý 21 novembre 2006 - Revisione: 3.1
Le informazioni in questo articolo si applicano a:
  • Microsoft Win32 Application Programming Interface
Chiavi:á
kbmt kbapi kbkernbase kbperfmon kbprb KB274323 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 274323
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilitÓ per articoli della Microsoft Knowledge Base su prodotti non pi¨ supportati
Questo articolo Ŕ stato scritto sui prodotti per cui Microsoft non offre pi¨ supporto. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.

Invia suggerimenti

 

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