Sign in Join
Wiki copytemporary

EpikTimer/ru: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11### О компоненте
22
33EpikTimer - это секундомер для программиста, способный измерять очень короткие события с чрезвычайно высокой точностью в течение длительных периодов времени. Он прост в использовании, практически не потребляет ЦП и требует только 25 B оперативной памяти для реализации экземпляра таймера. Компонент предоставляет один внутренний таймер ... но неограниченное число может быть объявлен извне и связан с одним компонентом EpikTimer на форме.
44
55Загруженный архив содержит компонент, установочный пакет и демонстрационное приложение, которое иллюстрирует функции компонента, а также некоторые инструменты для оценки источников синхронизации в данной системе.
66
77Этот компонент был разработан для кроссплатформенных приложений и был написан специально для Lazarus IDE и Free Pascal Compiler, и включает в себя демонстрационное приложение.
88
99### Автор
1010
1111Tom Lisjac
1212
1313### Лицензия
1414
1515[LGPL](http://www.opensource.org/licenses/lgpl-license.php)(пожалуйста, свяжитесь с автором, если LGPL не совместима с лицензированием вашего проекта)
1616
1717### Загрузка
1818
1919**Исходный код** можно загрузить из Git-репозитория следующим образом:
2020
21-` git clone `[`https://github.com/graemeg/epiktimer.git`](https://github.com/graemeg/epiktimer.git)
21+```text
22+ git clone https://github.com/graemeg/epiktimer.git
23+```
2224
2325Если вы не хотите устанавливать Git-клиент, Github также позволяет загружать последний код в виде ZIP-архива. Просто перейдите по ссылке [Github EpikTimer](https://github.com/graemeg/epiktimer) и нажмите кнопку «Загрузить ZIP» справа.
2426
2527Все **tagged releases** (помеченные выпуски) можно скачать в формате .zip или .tar.gz, перейдя по этой ссылке [Github Releases](https://github.com/graemeg/epiktimer/releases) и выбрав zip или tar.gz ссылка для любого релиза, который вы хотите скачать.
2628
2729------------------------------------------------------------------------
2830
2931Прим.перев.: Боюсь ошибиться, но в релизах Лазаруса после v.2.0.0 точно, EpikTimer можно скачать и установить посредством **O**nline **P**ackage **M**anager.
3032
3133------------------------------------------------------------------------
3234
3335### Статус проекта
3436
3537- В производстве/Стабильный
3638
3739### Change Log
3840
3941- Initially written on 24-06-2003 TL
4042- Pre-release 30-06-2003 TL - Needs testing on the BSD's and Win32
4143- Version 0.1 1-7-2003 TL
4244
43451. initial beta release
4446
4547- Version 0.2 3-7-2003 TL
4648
47491. Revised logic around hardware detection to prevent executing extended instructions if the HasCapabilityData call returns false.
48502. Removed exposed low level diagnositic functions from unit interface.
49513. Revised demo.
5052
5153- Version 0.3 15-11-2005
5254
53551. Updated 0.2 version to make it compile on the latest Lazarus (0.9.10).
54562. Added LCL to the required packages.
55573. Changed mode to Delphi in order to compile.
56584. Changed windows timebase to use QueryPerformanceCounter, because has a much greater precision then GetSystemTime.
57595. Added changes to ensure the component compiles on Delphi 7.0
58606. Made tests on Windows and Linux
59617. Small changes to the demo to make it compile
6062
6163- Version 1.0 06-10-2006
6264
63651. Changes for 64 bits operation
64662. Added units BaseUnix, Unix and UnixUtil, removed oldlinux (obsolete)
65673. Gettimeofday -\> fpGettimeofday
66684. Changed systemsleep for 64 bits systems
67695. Some changes in timeval
68706. Tested on AMD64 (linux)
6971
7072For any later changes, please see the Git commit log.
7173
7274### Зависимости/Системные требования
7375
7476- Разрешение Nanosecond поддерживается в версиях Intel Pentium с счетчиком Timestamp.
7577- Микросекундные системные часы являются временной базой по умолчанию.
7678
7779Протестировано на:
7880
7981- Pentium IV 3,2Ghz на Windows и Linux с большой точностью (~ 3,220,000,000 тиков/сек)
8082- Pentium 233 МГц с чертовски маленьким Linux. Прекрасно работает с аппаратными часами.
8183- Mobile AMD 64 Athlon 3200+ на Windows XP Home (32 bit), Lazarus 9.13
8284- Процессор AMD 64, работающем под управлением 64-битной версии Ubuntu Linux, Lazarus 9.18.
8385- Intel i7-3770K, работающем под управлением 64-разрядной версии FreeBSD 9.1, использует FPC 2.6.2
8486- ARM CPU, использующем Raspberry Pi и FPC 2.6.2
8587
8688### Установка в Lazarus IDE
8789
8890- В Components/Open Package File, откройте etpackage.lpk
8991- Скомпилируйте пакет и закройте окно диалога пакета
9092- В Components -\> Open Package File, откройте etpackage_dsgn.lpk
9193- Скомпилируйте пакет.
9294- Нажмите кнопку "Install" и пересоберите Lazarus
9395- Компонент появится в системной палитре (значок секундомера-линейки)
9496
9597### Использование
9698
9799Перетащите компонент на форму. Компонент содержит один экземпляр таймера, и вызовы без параметров для запуска, остановки, истечения и очистки будут неявно ссылаться на него.
98100
99101**Когда таймер называется ET**
100102
101103``` pascal
102104uses epiktimer;
103105
104106var
105107 ET: TEpikTimer;
106108
107109procedure InitTimer;
108110begin
109111 ET := TEpikTimer.Create(Application);
110112end;
111113
112114procedure InstrumentedCall;
113115Begin
114116 ET.Clear; // необязательно ... таймер очищается при создании
115117 ET.Start;
116118 ExecuteFirstTimedSection;
117119 ET.Stop; // таймер фактически приостановлен и может быть перезапущен позже
118120 TimedSection1:=ET.Elapsed; // запоминаем прошедшее время вообще
119121 MakeAnUntimedOverheadCall; // не учитывается в таймере
120122 ET.Start; //возобновляем таймер ... продолжаем накапливать тики
121123 CallTimedSection2;
122124 TimedSection2:=ET.Elapsed; //таймер продолжает работать ... мы просто сэмплируем его (т.е. формируем репрезентатитвную выборку).
123125 CallTimedSection3;
124126 CallSomethingElse;
125127 TimedSection3:=ET.Elapsed; //продолжаем считать ... фиксируем прошедшее время
126128 CallTimedSection4;
127129 TimedSection4:=ET.Elapsed; //продолжаем считать ... фиксируем прошедшее время
128130 ET.clear // готово ... таймер остановлен и обнулен
129131end;
130132```
131133
132134Вы также можете создать любое количество таймеров из одного компонента в форме, объявив запись TimerData и передав ее в качестве параметра для запуска, остановки, истечения и очистки с использованием перегруженных методов в компоненте. Примером может быть:
133135
134136``` pascal
135137Function TimedExecution: Extended;
136138Var
137139 DiskAccessTime:TimerData;
138140Begin
139141 ET.Clear(DiskAccessTimer); // Объявленные таймеры *должны* быть очищены перед использованием.
140142 ET.Start(DiskAccessTimer);
141143 ExecuteTheTimedSection;
142144 Result:=ET.Elapsed(DiskAccessTimer); // таймер продолжает работать ...
143145 и т.д. ...
144146```
145147
146148Одним из конкретных применений EpikTimer является проверка того, прошло ли заданное количество времени, прежде чем продолжить выполнение задачи или выполнить другую итерацию той же задачи.
147149
148150``` pascal
149151DelayInSeconds := 8.5; // или любое значение
150152OldTime := ET.Elapsed;
151153
152154while ((ET.Elapsed - OldTime) < DelayInSeconds) do
153155begin
154156 ET.SystemSleep(10);
155157end;
156158
157159// DelayInSeconds истек, и теперь вы можете продолжить выполнение кода
158160```
159161
160162Смотрите etdemo.pas для дополнительных примеров использования компонентов
161163
162164#### EpikTimer в качестве профайлера
163165
164166EpikTimer может быть использован для профилирования скорости процедур:
165167
166168``` pascal
167169uses
168170 {$ifdef PROFILING}epiktimer,{$endif}
169171 ...
170172
171173type
172174 TMyClass = class
173175 private
174176 {$ifdef PROFILING}
175177 profiler: Tepiktimer;
176178 {$endif}
177179 ...
178180 end;
179181
180182implementation
181183
182184constructor TMyClass.Create(AOwner: TComponent);
183185begin
184186 inherited Create(AOwner);
185187 ...
186188 {$ifdef CARDROOM_PROFILING}
187189 profiler := TEpikTimer.Create(Self)
188190 {$endif}
189191end;
190192
191193procedure TMyClass.MethodToBeProfiled;
192194begin
193195 {$ifdef PROFILING}
194196 profiler.Clear;
195197 profiler.Start;
196198 {$endif}
197199 // do stuff
198200 {$ifdef PROFILING}
199201 OPDebugLn('TMyClass.MethodToBeProfiled ' + FloatToStr(profiler.Elapsed));
200202 {$endif}
201203end;
202204```
203205
204206### Приложение ETDemo
205207
206208Приложение ETDemo не требует установки EpikTimer для компиляции и работы. Мне никогда не нравилось устанавливать палитру, полную компонентов, только для того, чтобы узнать, что мне не понравился ни один из них! :)
207209
208210**Установка**
209211
210212- Окройте etdemo.lpi
211213- Скомпилируйте
212214- Запустите
213215
214216### Консольное приложение
215217
216218Если у вас нет экземпляра объекта «Приложение», описанного выше, просто создайте экземпляр EpikTimer следующим образом. Он должен быть освобожден вручную, когда в нем отпадет нужда:
217219
218220``` pascal
219221 ET := TEpikTimer.Create(nil)
220222 ... здесь ваш код ...
221223 ET.Free;
222224```
223225
224226### См. также
225227
226228- [[doc:fcl/fptimer/index.html|FPTimer included with FPC/Lazarus]]
227229- [[Yet another Running Timer]]
228230
229231---
230232*From the Free Pascal wiki, page "EpikTimer/ru", as it stood on 2019-09-23 after a change by Zoltanleo, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
231233Category: Components

Back to history