High Performance Timer i Delphi

click fraud protection

For rutinemæssige desktop-databaseapplikationer gør tilføjelse af et enkelt sekund til en opgaves udførelsestid sjældent en forskel for slutbrugerne - men når du har brug for at behandle millioner af træblade eller generere milliarder af unikke tilfældige tal, bliver udførelseshastigheden vigtigere.

Timer ud din kode

I nogle applikationer er meget nøjagtige målemetoder med høj præcision tid heldigvis Delphi giver en højtydende tæller til at kvalificere disse tider.

Brug af RTL's Nu Fungere

Én mulighed bruger Nu fungere. Nu, defineret i SysUtils enhed, returnerer den aktuelle systemdato og -tid.

Et par kodelinjer måler den tid, der er gået mellem "start" og "stop" i en eller anden proces:

Nu-funktionen returnerer den aktuelle systemdato og -tid, der er nøjagtigt op til 10 millisekunder (Windows NT og nyere) eller 55 millisekunder (Windows 98).

I meget små intervaller er nøjagtigheden af ​​"Nu" undertiden ikke nok.

Brug af Windows API GetTickCount

Brug endnu en for mere præcise data GetTickCount

instagram viewer
Windows API fungere. GetTickCount henter antallet af millisekunder, der er gået siden systemet startede, men funktionen har kun præcisionen på 1 ms og er muligvis ikke altid nøjagtig, hvis computeren forbliver tændt i lange perioder med tid.

Den forløbne tid gemmes som en DWORD (32-bit) værdi. Derfor vil tiden vikle rundt til nul, hvis Windows køres kontinuerligt i 49,7 dage.

GetTickCount er også begrænset til nøjagtigheden af ​​systemtimeren (10/55 ms).

Høj præcision Timer din kode ud

Hvis din pc understøtter en tæller med høj opløsning, skal du bruge QueryPerformanceFrequency Windows API-funktion til at udtrykke frekvensen i tællinger pr. Sekund. Værdien af ​​tællingen er processorafhængig.

Det QueryPerformanceCounter -funktion henter den aktuelle værdi af højtopløsnings-tælleren. Ved at kalde denne funktion i begyndelsen og slutningen af ​​et kodesnit bruger en applikation tælleren som en højopløsnings timer.

Nøjagtigheden af ​​timere med høj opløsning er omkring et par hundrede nanosekunder. Et nanosekund er en tidsenhed, der repræsenterer 0.000000001 sekunder - eller 1 milliarddel af et sekund.

TStopWatch: Delphi-implementering af en tæller med høj opløsning

Med et blik til .Net navngivning konventioner, en tæller som TStopWatch tilbyder en højopløsnings-Delphi-løsning til præcise tidsmålinger.

TStopWatch måler den forløbne tid ved at tælle timer-kryds i den underliggende timer-mekanisme.

  • Det IsHighResolution egenskab angiver, om timeren er baseret på en tæller med høj opløsning.
  • Det Start Metoden begynder at måle den forløbne tid.
  • Det Hold op metoden stopper med at måle den forløbne tid.
  • Det ElapsedMilliseconds ejendom får den samlede forløbne tid i millisekunder.
  • Det Forløbet egenskab får den samlede forløbne tid i timer-kryds.

Her er et eksempel på brug:

instagram story viewer