Nagyteljesítményű időzítő Delphi-ben

A szokásos asztali adatbázis-alkalmazások esetében egy másodperc hozzáadása a feladat végrehajtási idejéhez ritkán eredményez különbséget a végfelhasználók számára, de ez mégis fontos amikor több millió falevelet kell feldolgoznia, vagy milliárd egyedi véletlen számot kell előállítania, a végrehajtás sebessége fontosabbá válik.

A kód időzítése

Egyes alkalmazásokban nagyon pontos és nagy pontosságú időmérési módszerek fontosak és szerencsére Delphi nagy teljesítményű számlálót kínál ezeknek az időknek a minősítéséhez.

RTL-ek használata Most Funkció

Az egyik lehetőség a Most funkció. Most, amelyet a SysUtils egység, az aktuális rendszer dátumát és időpontját adja vissza.

Néhány sornyi kódmérés eltelt egy idő "indulása" és "leállítása" között:

A Most funkció visszaadja a rendszer aktuális dátumát és időpontját, amely pontosan akár 10 milliszekundum (Windows NT vagy újabb) vagy 55 milliszekundum (Windows 98) lehet.

Nagyon kis időközönként a "Most" pontossága néha nem elég.

A Windows API GetTickCount használata

instagram viewer

A még pontosabb adatokhoz használja a GetTickCountWindows API funkció. GetTickCount lekérdezi a rendszer indítása óta eltelt ezredmásodperceket, de a funkciónak csak ez van 1 ms pontossággal, és nem mindig pontos, ha a számítógép hosszú ideig bekapcsolt állapotban van idő.

Az eltelt időt DWORD (32 bites) értékként tárolja. Ezért az idő nullára esik, ha a Windows folyamatosan 49,7 napig fut.

GetTickCount a rendszeridő pontosságára is korlátozódik (10/55 ms).

Nagy pontosságú időzítése a kódjának

Ha a számítógép támogatja a nagy felbontású teljesítményszámlálót, akkor használja a QueryPerformanceFrequency A Windows API funkció a frekvencia kifejezéséhez másodpercenként. A gróf értéke processzorfüggő.

Az QueryPerformanceCounter funkció lekérdezi a nagy felbontású teljesítményszámláló aktuális értékét. Ha meghívja ezt a funkciót a kódrészlet elején és végén, az alkalmazás nagy felbontású időzítőként használja a számlálót.

A nagy felbontású időzítők pontossága körülbelül néhány száz nanosekundum. A nanoszekundum egy időegység, amely 0.000000001 másodperc - vagyis a másodperc egymilliárd részét képviseli.

TStopWatch: Nagyfelbontású számláló Delphi megvalósítása

Bólintva a .Net elnevezési konvenciókhoz, például egy számláló TStopWatch nagy felbontású Delphi megoldást kínál a pontos időméréshez.

A TStopWatch az eltelt időt méri az időzítő kullancsok számításával az alapul szolgáló időzítő mechanizmusban.

  • Az IsHighResolution tulajdonság azt jelzi, hogy az időzítő nagy felbontású teljesítményszámlálón alapul-e.
  • Az Rajt A módszer megkezdi az eltelt idő mérését.
  • Az Állj meg módszer leállítja az eltelt idő mérését.
  • Az ElapsedMilliseconds tulajdonság megkapja az összes eltelt időt milliszekundumban.
  • Az Eltelt tulajdonság megkapja az összes eltelt időt időzítő kullancsokban.

Íme egy példa a felhasználásra:

instagram story viewer