Suure jõudlusega taimer Delphis

Rutiinsete lauaarvuti andmebaasirakenduste jaoks muudab ühe sekundi lisamine ülesande täitmisajale lõppkasutajatele harva vahet - kuid kui peate töötlema miljoneid puulehti või genereerima miljardeid kordumatuid juhuslikke numbreid, muutub täitmise kiirus olulisemaks.

Teie koodi aegumine

Mõnes rakenduses on väga täpsed ja ülitäpse aja mõõtmise meetodid olulised ja õnneks Delphi pakub nende aegade kvalifitseerimiseks suure jõudlusega loendurit.

RTL-ide kasutamine Nüüd Funktsioon

Üks võimalus kasutab Nüüd funktsiooni. Nüüd, mis on määratletud SysUtils ühik, tagastab praeguse süsteemi kuupäeva ja kellaaja.

Mõni protsess "käivituse" ja "seiskamise" vahel kulus paaril koodimõõdul:

Funktsioon Nüüd tagastab praeguse süsteemi kuupäeva ja kellaaja täpsusega kuni 10 millisekundit (Windows NT ja uuemad) või 55 millisekundit (Windows 98).

Väga väikeste intervallide korral ei piisa "Nüüd" täpsusest mõnikord.

Windows API GetTickCount kasutamine

Veelgi täpsemate andmete saamiseks kasutage nuppu GetTickCount

instagram viewer
Windowsi API funktsiooni. GetTickCount hangib süsteemi käivitamisest möödunud millisekundite arvu, kuid ainult funktsioonil on täpsusega 1 ms ja see ei pruugi alati olla täpne, kui arvuti on pikka aega sisselülitatud aeg.

Kulunud aeg salvestatakse DWORD (32-bitise) väärtusena. Seetõttu väheneb aeg nullini, kui Windowsi töödeldakse pidevalt 49,7 päeva.

GetTickCount on piiratud ka süsteemi taimeri täpsusega (10/55 ms).

Teie koodi ülitäpne ajastus

Kui teie arvuti toetab suure eraldusvõimega loendurit, kasutage nuppu QueryPerformanceFrequency Windowsi API funktsioon sageduse väljendamiseks sekundites. Loendamise väärtus sõltub protsessorist.

QueryPerformanceCounter funktsioon hangib suure eraldusvõimega jõudlusloenduri praeguse väärtuse. Selle funktsiooni kutsumisega koodilõigu alguses ja lõpus kasutab rakendus loendurit suure eraldusvõimega taimerina.

Kõrge eraldusvõimega taimerite täpsus on paarsada nanosekundit. Nanosekund on ajaühik, mis tähistab 0,000000001 sekundit - või 1 miljard sekundit.

TStopWatch: kõrglahutusega loenduri Delphi juurutamine

Noogutades .Netnimetamise tavade vastu meeldib loendur TStopWatch pakub täpse aja mõõtmise jaoks suure eraldusvõimega Delphi lahendust.

TStopWatch mõõdab möödunud aega, lugedes taimeripunkte aluseks olevasse taimerimehhanismi.

  • IsHighResolution atribuut näitab, kas taimer põhineb suure eraldusvõimega jõudlusloenduril.
  • Alusta meetod alustab möödunud aja mõõtmist.
  • Peatu meetod peatab möödunud aja mõõtmise.
  • KulunudMillisekundit vara saab kogu kulunud aja millisekundites.
  • Kulunud vara saab kogu kulunud aja taimeripuukidena.

Siin on kasutamise näide:

instagram story viewer