Tajmer visoke performanse u Delfima

Za rutinske aplikacije baza podataka za stolna računala dodavanje jedne sekunde vremenu izvršenja zadatka krajnjim korisnicima rijetko mijenja - ali kada trebate obraditi milijune lišća stabala ili generirati milijarde jedinstvenih slučajnih brojeva, brzina izvođenja postaje važnija.

Isključivanje koda

U nekim su primjenama važne i srećom vrlo precizne, precizne metode mjerenja vremena Delphi pruža brojač visokih performansi za kvalificiranje ovih puta.

Korištenje RTL-ova Sada Funkcija

Jedna opcija koristi Sada funkcija. Sada, definirano u SysUtils jedinica, vraća trenutni datum i vrijeme sustava.

Prošlo je nekoliko redaka mjere koda između "početka" i "zaustavljanja" nekog procesa:

Funkcija Now vraća trenutni datum i vrijeme sustava koji su točni do 10 milisekundi (Windows NT i noviji) ili 55 milisekundi (Windows 98).

Za vrlo male intervale preciznost "Sada" ponekad nije dovoljna.

Korištenje Windows API-ja GetTickCount

Za još preciznije podatke koristite GetTickCountWindows API funkcija.

instagram viewer
GetTickCount dohvaća broj milisekundi koji su prošli od pokretanja sustava, ali funkciju samo ima preciznost od 1 ms i ne mora uvijek biti točna ako je računalo dugo uključeno u napajanje vrijeme.

Prošlo vrijeme pohranjuje se kao DWORD (32-bitna) vrijednost. Stoga će se vrijeme vremenski smanjiti na nulu ako se Windows stalno pokreće 49,7 dana.

GetTickCount ograničena je i na točnost sistemskog brojača (10/55 ms).

Visoka preciznost isticanja koda

Ako vaše računalo podržava brojač performansi visoke rezolucije, upotrijebite QueryPerformanceFrequency Windows API funkcija za izražavanje frekvencije u brojevima u sekundi. Vrijednost broja ovisi o procesoru.

QueryPerformanceCounter funkcija dohvaća trenutnu vrijednost brojača performansi visoke rezolucije. Pozivanjem ove funkcije na početku i na kraju odjeljka koda, aplikacija koristi brojač kao timer visoke rezolucije.

Točnost tajmera visoke rezolucije iznosi oko nekoliko stotina nanosekundi. Nanosekunda je jedinica vremena koja predstavlja 0,000000001 sekundi - ili 1 milijardu sekunde.

TStopWatch: Delphi implementacija brojača visoke rezolucije

S kimanjem glava u. Neto imenovanja konvencija, brojač kao TStopWatch nudi Delphi rješenje visoke rezolucije za precizna mjerenja vremena.

TStopWatch mjeri proteklo vrijeme brojenjem vremenskih krpelja u mehanizmu vremena tajmera.

  • IsHighResolution svojstvo pokazuje da li se tajmer temelji na brojaču performansi visoke rezolucije.
  • Početak metoda započinje mjerenje proteklog vremena.
  • Stop metoda zaustavlja mjerenje protečenog vremena.
  • ElapsedMilliseconds svojstvo dobiva ukupno proteklo vrijeme u milisekundama.
  • Proteklo svojstvo dobiva ukupno proteklo vrijeme u odbrojavanjima tajmera.

Evo primjera upotrebe:

instagram story viewer