Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Высокоточный таймер 2

Delphi , Компоненты и Классы , TTimer

Высокоточный таймер 2

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  You want to measure the elapsed time in a repeat, while or a for -Loop 
  to do some optimation ? 

  Sie mochten eine Routine mit einer repeat, while oder for i :=...hinsichtlich der 
  durchlaufenen Zeit messen, um z.B.Optimierungsaktivitaten durchzufuhren. 
}

 // Global Variables, Globale Variablen: 

  t1, t2, Res: TLargeInteger;
   bOk: BOOL;

 implementation

 uses Windows, dialogs;

 procedure StartTimer;
 begin
   bOK := QueryPerformanceFrequency(Res);
   if bOK then
     QueryPerformanceCounter(t1);
 end;

 procedure StopTimer;
 begin
   if bOK then
     QueryPerformanceCounter(t2);
 end;

 procedure LoopRoutine;
 var
   iCounter: integer;
 begin
   StartTimer;
   // Put here some kind of loop: For, While or Repeat 
  for i := 0 to iCounter do...
   { WHILE.... 
   repeat...until}
   { After the Loop/ 
   Nach Abschluss der Schleifenroutine:}
     if bOK then
       QueryPerformanceCounter(t2);
 end;

 procedure StartSchleife;
 begin
   LoopRoutine;
   if bOK then
     {$IFDEF VER80}
     // Show the elapsed time: 
    MessageDlg('Der Schleifendurchlauf dauerte: ' + Format('%g Sekunden.',
       [(t2.QuadPart - t1.Quadpart) / Res.QuadPart]));
   $Else {$IFDEF VER120}
   MessageDlg('Der Schleifendurchlauf dauerte: ' + Format('%g Sekunden.',
     [(t2 - t1) / Res]));
   {$ENDIF}
 end;

Вот перевод текста на русский язык:

Код Delphi, реализующий высокопrecision таймер с помощью функции QueryPerformanceCounter, измеряющей прошедшее время с высокой точностью. Таймер может использоваться для измерения времени выполнения рутины в цикле (например, For, While или Repeat) и отображения результата.

Вот разбивка кода:

Глобальные переменные

  • t1 и t2: переменные типа TLargeInteger, хранящие начальный и конечный временные метки
  • Res: переменная типа TLargeInteger, хранящая частоту таймера (решение)
  • bOk: булевая переменная, указывающая, была ли успешно инициализирована таймер

Имплементация

Код разделен на три процедуры:

  1. StartTimer: инициализирует таймер, вызывая QueryPerformanceFrequency и хранящий результат в Res. Если инициализация прошла успешно, то вызывает QueryPerformanceCounter для получения текущей временной метки (t1).
  2. StopTimer: останавливает таймер, вызывая QueryPerformanceCounter для получения текущей временной метки (t2) только если bOk истинна.
  3. LoopRoutine: содержит цикл (в этом случае, For-цикл), который может быть заменен на любой тип цикла (например, While или Repeat). Он вызывает StartTimer перед циклом и StopTimer после цикла. Время выполнения вычисляется как (t2.QuadPart - t1.QuadPart) / Res.QuadPart.
  4. StartSchleife: вызывает LoopRoutine и отображает время выполнения с помощью диалогового окна сообщений.

Замечания

  • Код использует директивы компиляции ($IFDEF VER80 и $IFDEF VER120) для отображения времени выполнения в диалоговом окне сообщений, в зависимости от версии Delphi.
  • Частота таймера хранится в Res, которая получается вызовом QueryPerformanceFrequency.
  • Время выполнения вычисляется как разница между конечной временной меткой (t2) и начальной временной меткой (t1), разделенная на частоту таймера.

В целом, этот код предоставляет высокопrecision таймер, который может использоваться для измерения времени выполнения рутины в цикле. Он полезен для оптимизации критически важного кода.

В статье рассматривается высокоточный таймер на языке Delphi, который позволяет измерять время выполнения циклов и оптимизировать программу.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TTimer ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:08:49/0.0055251121520996/1