Vysoce výkonný časovač v Delphi

U rutinních databázových aplikací pro stolní počítače, přidání jedné sekundy k času provedení úkolu málokdy pro koncové uživatele rozdíl - ale když potřebujete zpracovat miliony listů stromu nebo vygenerovat miliardy jedinečných náhodných čísel, rychlost provádění se stává důležitější.

Časový limit vašeho kódu

V některých aplikacích jsou velmi přesné a velmi přesné metody měření času důležité a naštěstí Delphi poskytuje vysoce výkonný čítač pro kvalifikování těchto časů.

Pomocí RTL Nyní Funkce

Jedna možnost používá Nyní funkce. Nyní, definované v SysUtils jednotka, vrací aktuální systémové datum a čas.

Několik řádků kódu měří čas mezi „startem“ a „zastavením“ některého procesu:

Funkce Now vrací aktuální systémové datum a čas, který je přesný až na 10 milisekund (Windows NT a novější) nebo 55 milisekund (Windows 98).

Pro velmi malé intervaly přesnost "Now" někdy nestačí.

Používání Windows API GetTickCount

Pro ještě přesnější údaje použijte GetTickCountWindows API funkce. GetTickCount načte počet milisekund, které uplynuly od spuštění systému, ale funkce má pouze přesnost 1 ms a nemusí být vždy přesná, pokud počítač zůstane zapnutý po dlouhou dobu čas.

instagram viewer

Uplynulý čas je uložen jako hodnota DWORD (32 bitů). Čas se proto zalomí na nulu, pokud je systém Windows spuštěn nepřetržitě 49,7 dní.

GetTickCount je také omezena na přesnost systémového časovače (10/55 ms).

Vysoce přesný časový limit vašeho kódu

Pokud váš počítač podporuje čítač výkonu s vysokým rozlišením, použijte QueryPerformanceFrequency Funkce Windows API pro vyjádření frekvence v počtu za sekundu. Hodnota počtu závisí na procesoru.

QueryPerformanceCounter Funkce načte aktuální hodnotu čítače výkonu s vysokým rozlišením. Voláním této funkce na začátku a na konci části kódu aplikace použije čítač jako časovač s vysokým rozlišením.

Přesnost časovačů s vysokým rozlišením je kolem několika stovek nanosekund. Nanosekunda je jednotka času představující 0,000000001 sekundy - nebo 1 miliardtinu sekundy.

TStopWatch: Delphi implementace čítače s vysokým rozlišením

S přikývnutím k. Net pojmenování konvencí, pult jako TStopWatch nabízí řešení Delphi s vysokým rozlišením pro přesné měření času.

TStopWatch měří uplynulý čas spočítáním časových značek v základním časovém mechanismu.

  • IsHighResolution vlastnost označuje, zda je časovač založen na čítači výkonu s vysokým rozlišením.
  • Start metoda začne měřit uplynulý čas.
  • Stop metoda přestane měřit uplynulý čas.
  • Uplynuly milisekundy Vlastnost získá celkový uplynulý čas v milisekundách.
  • Uplynulý Vlastnost získá celkový uplynulý čas v klíštěch časovače.

Zde je příklad použití:

instagram story viewer