Таймер с висока производителност в Delphi

За рутинни приложения за настолни бази данни добавянето на една секунда към времето за изпълнение на задачата рядко има значение за крайните потребители - но когато трябва да обработите милиони дървесни листа или да генерирате милиарди уникални случайни числа, скоростта на изпълнение става по-важна.

График на вашия код

В някои приложения са важни и за щастие много точни, точни методи за измерване на времето Delphi осигурява високоефективен брояч, който да се класира в тези времена.

Използване на RTL Сега функция

Единият вариант използва Сега функция. Сега, дефинирани в SysUtils единица, връща текущата дата и час на системата.

Няколко реда кодова мярка измина времето между „старта“ и „спирането“ на някакъв процес:

Функцията Now връща текущата системна дата и час, които са точни до 10 милисекунди (Windows NT и по-нови) или 55 милисекунди (Windows 98).

За много малки интервали точността на "Сега" понякога не е достатъчна.

Използване на Windows API GetTickCount

За още по-точни данни използвайте

instagram viewer
GetTickCountAPI на Windows функция. GetTickCount извлича броя на милисекундите, изминали от стартирането на системата, но функцията има само точността от 1 ms и не винаги може да бъде точна, ако компютърът остане захранван за дълги периоди от време.

Изминалото време се съхранява като DWORD (32-битова) стойност. Следователно времето ще се завърне до нула, ако Windows се работи непрекъснато в продължение на 49,7 дни.

GetTickCount също е ограничена до точността на системния таймер (10/55 ms).

Висока прецизност и отчитане на вашия код

Ако вашият компютър поддържа брояч на производителност с висока разделителна способност, използвайте QueryPerformanceFrequency Функция за API на Windows за изразяване на честотата в броени секунди. Стойността на броя зависи от процесора.

Най- QueryPerformanceCounter функция извлича текущата стойност на брояча на производителността с висока разделителна способност. Като извиква тази функция в началото и в края на раздел от кода, приложението използва брояча като таймер с висока резолюция.

Точността на таймерите с висока резолюция е около няколкостотин наносекунди. Наносекундата е единица време, представляваща 0,000000001 секунди - или 1 милиард от секундата.

TStopWatch: Delphi внедряване на брояч с висока резолюция

С кимване към .Net назоваване на конвенции, брояч като TStopWatch предлага решение с висока резолюция Delphi за прецизни измервания на времето.

TStopWatch измерва изминалото време, като брои таймерите в основния механизъм на таймера.

  • Най- IsHighResolution свойството показва дали таймерът се основава на брояч на производителност с висока разделителна способност.
  • Най- начало метод започва измерване на изминало време.
  • Най- Спри се метод спира измерването на изминалото време.
  • Най- ElapsedMilliseconds свойството получава общото изминало време в милисекунди.
  • Най- Изминало свойството получава общото изминало време в таймерите.

Ето пример за използване:

instagram story viewer