Visokozmogljiv timer v Delfih

click fraud protection

Pri rutinskih aplikacijah za namizne baze podatkov končni uporabniki redko dodajo samo sekundo času izvajanja opravila - vendar ko morate obdelovati milijone drevesnih listov ali ustvariti milijarde edinstvenih naključnih števil, postane hitrost izvedbe pomembnejša.

Potek kode

V nekaterih aplikacijah so pomembne in na srečo zelo natančne, natančne metode merjenja časa Delphi zagotavlja visokozmogljiv števec, ki se lahko uvrsti v te čase.

Uporaba RTL-ov Zdaj Funkcija

Ena možnost uporablja Zdaj funkcijo. Zdaj, opredeljeno v SysUtils enota, vrne trenutni datum in čas sistema.

Med "začetkom" in "ustavitvijo" nekega procesa je pretekel nekaj vrstic merjenja kode:

Funkcija Now vrne trenutni sistemski datum in čas, natančna do 10 milisekund (Windows NT in novejši) ali 55 milisekund (Windows 98).

Za zelo majhne intervale natančnost "Zdaj" včasih ni dovolj.

Uporaba programa Windows API GetTickCount

Za še natančnejše podatke uporabite GetTickCountWindows API funkcijo. GetTickCount pridobi število milisekund, ki so pretekle od zagona sistema, vendar funkcija le natančnost 1 ms in ni vedno natančna, če je računalnik dalj časa vklopljen čas.

instagram viewer

Pretekli čas je shranjen kot DWORD (32-bitna) vrednost. Če se Windows nenehno izvaja 49,7 dni, se bo čas zmanjšal na nič.

GetTickCount je omejena tudi na točnost časovnika sistema (10/55 ms).

Visoka natančnost določitve kode

Če vaš računalnik podpira števec zmogljivosti visoke ločljivosti, uporabite QueryPerformanceFrequency Windows API funkcija za izražanje frekvence v štetjih na sekundo. Vrednost štetja je odvisna od procesorja.

The QueryPerformanceCounter funkcija pridobi trenutno vrednost števca zmogljivosti visoke ločljivosti. Aplikacija s klicem te funkcije na začetku in koncu odseka kode uporablja števec kot časovnik z visoko ločljivostjo.

Natančnost časovnikov z visoko ločljivostjo je približno nekaj sto nanosekund. Nanosekunda je enota časa, ki predstavlja 0,000000001 sekunde - ali 1 milijardo sekunde.

TStopWatch: Delphi implementacija števca visoke ločljivosti

S kimanjem na .Net konvencij o poimenovanju, števec podoben TStopWatch ponuja rešitev Delphi z visoko ločljivostjo za natančne meritve časa.

TStopWatch meri pretečen čas s štetjem krmilnikov v časovnem mehanizmu.

  • The IsHighResolution lastnost kaže, ali časovnik temelji na števcu zmogljivosti visoke ločljivosti.
  • The Začni metoda začne meriti pretečen čas.
  • The Nehaj metoda ustavi merjenje pretečenega časa.
  • The Iztekle milisekunde lastnost dobi skupni pretečeni čas v milisekundah.
  • The Izteklo nepremičnina dobi skupni pretečeni čas v krmaricah.

Tu je primer uporabe:

instagram story viewer