Performans sayacı değeri beklenmedik biçimde ileri leap

Makale çevirileri Makale çevirileri
Makale numarası: 274323 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

QueryPerformanceCounter işlevi tarafından döndürülen sonuç beklenmedik biçimde ileri zaman zaman leap. Bu artık, birkaç saniye gösterebilir.

Neden

Endüstri Standart Mimarisi (ISA) bazı yonga kümeleri köprüsüne bir çevre birimi bileşen bağlantı (PCI) tasarım üründe sonucunda bu sorun oluşur. Bu köprüyü sık Güney köprüsü denir. Işletim sistemi Köprüsü'nden bir dizi beklenmeyen sonuçlar aldığında, bir PCI veri yolu aşırı, atlanıyor oluşur. Işletim sistemi, beklenmeyen sonuçlar algılar ve için performans sayacı eklemek için bir tutar olarak hesaplar. Bu, ileri atlamak için QueryPerformanceCounter döndürülen sonuç neden olur.

Çözüm

Programları, GetTickCount işlevini art arda çağrılar tarafından belirlenen zamanda değişikliği QueryPerformanceCounter art arda çağrılar tarafından belirlenen zaman içinde değişiklik karşılaştırarak beklenmeyen bir atlama için izleyebilirsiniz. QueryPerformanceCounter ('), ancak üzerinde GetTickCount temel benzer hiçbir artırma temel alan önemli bir atlama varsa, daha sonra performans sayacı yalnızca ileri atlanan olduğunu kabul. Kod örneği, bu makalenin sonunda, bunun nasıl yapılacağını gösterir.

Durum

Bu işletim sisteminin davranış tasarım gereğidir. Işletim sistemi güvenilir olmayan veriler yonga kümesi ' aldığında, performans sayacı ayarı gereklidir.

Daha fazla bilgi

Bir donanım yongası içindeki tasarım hataları bulma işlemi bilinir. Bu tasarım hatalarından yayımlanmış belirtimleri farklı ürün neden olabilir. Belirli bir yonga kümeleri içinde bulma hakkında daha fazla bilgi için yonga kümesi için donanım satıcınızla temasa geçin.

Bir makine PCI bileşenleri, Windows kayıt defterinde aşağıdaki anahtarı içinde bir PCI tanıtıcısı tarafından tanımlanır:
Hkey_local_machıne\system\currentcontrolset\enum\pcı
Alt anahtarlarının adları aşağıdaki biçime sahip.
Xxxx VEN_ & DEV_yyyy & SUBSYS_aaaaaaaa & REV_bb
Burada xxxx: yyyy PCI tanımlayıcısını gösterir.

Şimdilik, performans sayacı değeri bir atlamayı gösteren aşağıdaki PCI tanımlayıcılar yongaları bilinmektedir:
Bu tabloyu kapaBu tabloyu aç
pci KİMLİĞİDonanım satıcı
1039:0530<a1>Sistem</a1> (SiS) Silicon ıntegrated
1039:0620<a1>Sistem</a1> (SiS) Silicon ıntegrated
10B9:0533Acer Labs, ınc.e (ALi)
10B9:1533Acer Labs, ınc.e (ALi)
1106:0596VIA Technologies, ınc. (VIA)
1106:0686VIA Technologies, ınc. (VIA)
1166:004FServerworks Corporation
1166:0050Serverworks Corporation
8086:7110Intel Corporation
Bu liste, diğer yonga kümeleri içinde davranışı Microsoft gözlemliyorsa gibi güncelleştirilir.

Örnek kod

Aşağıdaki örnek kod, performans sayacı leaps algılamak için yukarıda anlatılan yöntem gösterilmektedir. Örneğin, kod PIIX4 yonga kümesi bulunan bir bilgisayarda çalıştırırsanız, bu konsol uygulaması ara_sıra leaps performans sayacı değeri bildirir.
#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;
}

Özellikler

Makale numarası: 274323 - Last Review: 21 Kasım 2006 Salı - Gözden geçirme: 3.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Win32 Uygulama Programlama Arabirimi
Anahtar Kelimeler: 
kbmt kbapi kbkernbase kbperfmon kbprb KB274323 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:274323
Kullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.

Geri Bildirim Ver

 

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