Delphi'de Yüksek Performans Zamanlayıcısı

click fraud protection

Rutin masaüstü veritabanı uygulamaları için, görevin yürütme süresine bir saniye eklenmesi son kullanıcılar için nadiren fark yaratır - ancak milyonlarca ağaç yaprağını işlemeniz veya milyarlarca benzersiz rastgele sayı üretmeniz gerektiğinde, yürütme hızı daha önemli hale gelir.

Kodunuzu Zaman Aşımı

Bazı uygulamalarda çok doğru, yüksek hassasiyetli zaman ölçüm yöntemleri önemlidir ve şans eseri Delphi bu zamanları değerlendirmek için yüksek performanslı bir sayaç sağlar.

RTL'leri kullanma şimdi fonksiyon

Bir seçenek, şimdi işlevi. şimdi, SysUtils birim, geçerli sistem tarih ve saatini döndürür.

Birkaç satır kod ölçümü, bazı işlemlerin "start" ve "stop" işlemleri arasında geçen süreyi:

Şimdi işlevi, geçerli sistem tarih ve saatini 10 milisaniyeye (Windows NT ve üstü) veya 55 milisaniyeye (Windows 98) kadar doğru olarak döndürür.

Çok küçük aralıklar için "Şimdi" nin hassasiyeti bazen yeterli olmaz.

Windows API GetTickCount kullanma

Daha da hassas veriler için GetTickCountWindows API'sı işlevi.

instagram viewer
GetTickCount sistem başlatıldığından beri geçen milisaniye sayısını alır, ancak işlev yalnızca 1 ms hassasiyet ve bilgisayar uzun süre açık kaldığında her zaman doğru olmayabilir saati.

Geçen süre DWORD (32 bit) değeri olarak kaydedilir. Bu nedenle, Windows 49.7 gün boyunca sürekli çalıştırılırsa, zaman sıfıra sarılır.

GetTickCount ayrıca sistem zamanlayıcısının doğruluğu ile sınırlıdır (10/55 ms).

Kodunuzda Yüksek Hassasiyetli Zaman Aşımı

Bilgisayarınız yüksek çözünürlüklü performans sayacını destekliyorsa, QueryPerformanceFrequency Saniyedeki sayımlarla frekansı ifade eden Windows API işlevi. Sayım değeri işlemciye bağlıdır.

QueryPerformanceCounter işlevi, yüksek çözünürlüklü performans sayacının geçerli değerini alır. Bir kod bölümünün başında ve sonunda bu işlevi çağıran bir uygulama, sayacı yüksek çözünürlüklü bir zamanlayıcı olarak kullanır.

Yüksek çözünürlüklü zamanlayıcıların doğruluğu birkaç yüz nanosaniyedir. Bir nanosaniye, 0.000000001 saniyeyi veya saniyenin 1 milyarda birini temsil eden bir zaman birimidir.

TStopWatch: Delphi Yüksek Çözünürlüklü Sayacın Uygulanması

Net adlandırma kurallarına bir başıyla, bir sayaç gibi TStopWatch hassas zaman ölçümleri için yüksek çözünürlüklü Delphi çözümü sunar.

TStopWatch, alttaki zamanlayıcı mekanizmasındaki zamanlayıcı kenelerini sayarak geçen zamanı ölçer.

  • IsHighResolution özelliği, zamanlayıcının yüksek çözünürlüklü performans sayacını temel alıp almadığını gösterir.
  • Başlat yöntemi geçen süreyi ölçmeye başlar.
  • Dur yöntem geçen süreyi ölçmeyi durdurur.
  • ElapsedMilliseconds mülk, geçen toplam süreyi milisaniye cinsinden alır.
  • geçen özelliği, zamanlayıcı kenelerinde toplam geçen süreyi alır.

İşte bir kullanım örneği:

instagram story viewer