Sign in Join
Wiki copytemporary

EpikTimer/ru: what changed

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

Title: EpikTimer/ru

OldNewLine
1+### О компоненте
2+
3+EpikTimer - это секундомер для программиста, способный измерять очень короткие события с чрезвычайно высокой точностью в течение длительных периодов времени. Он прост в использовании, практически не потребляет ЦП и требует только 25 B оперативной памяти для реализации экземпляра таймера. Компонент предоставляет один внутренний таймер ... но неограниченное число может быть объявлен извне и связан с одним компонентом EpikTimer на форме.
4+
5+Загруженный архив содержит компонент, установочный пакет и демонстрационное приложение, которое иллюстрирует функции компонента, а также некоторые инструменты для оценки источников синхронизации в данной системе.
6+
7+Этот компонент был разработан для кроссплатформенных приложений и был написан специально для Lazarus IDE и Free Pascal Compiler, и включает в себя демонстрационное приложение.
8+
9+### Автор
10+
11+Tom Lisjac
12+
13+### Лицензия
14+
15+[LGPL](http://www.opensource.org/licenses/lgpl-license.php)(пожалуйста, свяжитесь с автором, если LGPL не совместима с лицензированием вашего проекта)
16+
17+### Загрузка
18+
19+**Исходный код** можно загрузить из Git-репозитория следующим образом:
20+
21+` git clone `[`https://github.com/graemeg/epiktimer.git`](https://github.com/graemeg/epiktimer.git)
22+
23+Если вы не хотите устанавливать Git-клиент, Github также позволяет загружать последний код в виде ZIP-архива. Просто перейдите по ссылке [Github EpikTimer](https://github.com/graemeg/epiktimer) и нажмите кнопку «Загрузить ZIP» справа.
24+
25+Все **tagged releases** (помеченные выпуски) можно скачать в формате .zip или .tar.gz, перейдя по этой ссылке [Github Releases](https://github.com/graemeg/epiktimer/releases) и выбрав zip или tar.gz ссылка для любого релиза, который вы хотите скачать.
26+
27+------------------------------------------------------------------------
28+
29+Прим.перев.: Боюсь ошибиться, но в релизах Лазаруса после v.2.0.0 точно, EpikTimer можно скачать и установить посредством **O**nline **P**ackage **M**anager.
30+
31+------------------------------------------------------------------------
32+
33+### Статус проекта
34+
35+- В производстве/Стабильный
36+
37+### Change Log
38+
39+- Initially written on 24-06-2003 TL
40+- Pre-release 30-06-2003 TL - Needs testing on the BSD's and Win32
41+- Version 0.1 1-7-2003 TL
42+
43+1. initial beta release
44+
45+- Version 0.2 3-7-2003 TL
46+
47+1. Revised logic around hardware detection to prevent executing extended instructions if the HasCapabilityData call returns false.
48+2. Removed exposed low level diagnositic functions from unit interface.
49+3. Revised demo.
50+
51+- Version 0.3 15-11-2005
52+
53+1. Updated 0.2 version to make it compile on the latest Lazarus (0.9.10).
54+2. Added LCL to the required packages.
55+3. Changed mode to Delphi in order to compile.
56+4. Changed windows timebase to use QueryPerformanceCounter, because has a much greater precision then GetSystemTime.
57+5. Added changes to ensure the component compiles on Delphi 7.0
58+6. Made tests on Windows and Linux
59+7. Small changes to the demo to make it compile
60+
61+- Version 1.0 06-10-2006
62+
63+1. Changes for 64 bits operation
64+2. Added units BaseUnix, Unix and UnixUtil, removed oldlinux (obsolete)
65+3. Gettimeofday -\> fpGettimeofday
66+4. Changed systemsleep for 64 bits systems
67+5. Some changes in timeval
68+6. Tested on AMD64 (linux)
69+
70+For any later changes, please see the Git commit log.
71+
72+### Зависимости/Системные требования
73+
74+- Разрешение Nanosecond поддерживается в версиях Intel Pentium с счетчиком Timestamp.
75+- Микросекундные системные часы являются временной базой по умолчанию.
76+
77+Протестировано на:
78+
79+- Pentium IV 3,2Ghz на Windows и Linux с большой точностью (~ 3,220,000,000 тиков/сек)
80+- Pentium 233 МГц с чертовски маленьким Linux. Прекрасно работает с аппаратными часами.
81+- Mobile AMD 64 Athlon 3200+ на Windows XP Home (32 bit), Lazarus 9.13
82+- Процессор AMD 64, работающем под управлением 64-битной версии Ubuntu Linux, Lazarus 9.18.
83+- Intel i7-3770K, работающем под управлением 64-разрядной версии FreeBSD 9.1, использует FPC 2.6.2
84+- ARM CPU, использующем Raspberry Pi и FPC 2.6.2
85+
86+### Установка в Lazarus IDE
87+
88+- В Components/Open Package File, откройте etpackage.lpk
89+- Скомпилируйте пакет и закройте окно диалога пакета
90+- В Components -\> Open Package File, откройте etpackage_dsgn.lpk
91+- Скомпилируйте пакет.
92+- Нажмите кнопку "Install" и пересоберите Lazarus
93+- Компонент появится в системной палитре (значок секундомера-линейки)
94+
95+### Использование
96+
97+Перетащите компонент на форму. Компонент содержит один экземпляр таймера, и вызовы без параметров для запуска, остановки, истечения и очистки будут неявно ссылаться на него.
98+
99+**Когда таймер называется ET**
100+
101+``` pascal
102+uses epiktimer;
103+
104+var
105+ ET: TEpikTimer;
106+
107+procedure InitTimer;
108+begin
109+ ET := TEpikTimer.Create(Application);
110+end;
111+
112+procedure InstrumentedCall;
113+Begin
114+ ET.Clear; // необязательно ... таймер очищается при создании
115+ ET.Start;
116+ ExecuteFirstTimedSection;
117+ ET.Stop; // таймер фактически приостановлен и может быть перезапущен позже
118+ TimedSection1:=ET.Elapsed; // запоминаем прошедшее время вообще
119+ MakeAnUntimedOverheadCall; // не учитывается в таймере
120+ ET.Start; //возобновляем таймер ... продолжаем накапливать тики
121+ CallTimedSection2;
122+ TimedSection2:=ET.Elapsed; //таймер продолжает работать ... мы просто сэмплируем его (т.е. формируем репрезентатитвную выборку).
123+ CallTimedSection3;
124+ CallSomethingElse;
125+ TimedSection3:=ET.Elapsed; //продолжаем считать ... фиксируем прошедшее время
126+ CallTimedSection4;
127+ TimedSection4:=ET.Elapsed; //продолжаем считать ... фиксируем прошедшее время
128+ ET.clear // готово ... таймер остановлен и обнулен
129+end;
130+```
131+
132+Вы также можете создать любое количество таймеров из одного компонента в форме, объявив запись TimerData и передав ее в качестве параметра для запуска, остановки, истечения и очистки с использованием перегруженных методов в компоненте. Примером может быть:
133+
134+``` pascal
135+Function TimedExecution: Extended;
136+Var
137+ DiskAccessTime:TimerData;
138+Begin
139+ ET.Clear(DiskAccessTimer); // Объявленные таймеры *должны* быть очищены перед использованием.
140+ ET.Start(DiskAccessTimer);
141+ ExecuteTheTimedSection;
142+ Result:=ET.Elapsed(DiskAccessTimer); // таймер продолжает работать ...
143+ и т.д. ...
144+```
145+
146+Одним из конкретных применений EpikTimer является проверка того, прошло ли заданное количество времени, прежде чем продолжить выполнение задачи или выполнить другую итерацию той же задачи.
147+
148+``` pascal
149+DelayInSeconds := 8.5; // или любое значение
150+OldTime := ET.Elapsed;
151+
152+while ((ET.Elapsed - OldTime) < DelayInSeconds) do
153+begin
154+ ET.SystemSleep(10);
155+end;
156+
157+// DelayInSeconds истек, и теперь вы можете продолжить выполнение кода
158+```
159+
160+Смотрите etdemo.pas для дополнительных примеров использования компонентов
161+
162+#### EpikTimer в качестве профайлера
163+
164+EpikTimer может быть использован для профилирования скорости процедур:
165+
166+``` pascal
167+uses
168+ {$ifdef PROFILING}epiktimer,{$endif}
169+ ...
170+
171+type
172+ TMyClass = class
173+ private
174+ {$ifdef PROFILING}
175+ profiler: Tepiktimer;
176+ {$endif}
177+ ...
178+ end;
179+
180+implementation
181+
182+constructor TMyClass.Create(AOwner: TComponent);
183+begin
184+ inherited Create(AOwner);
185+ ...
186+ {$ifdef CARDROOM_PROFILING}
187+ profiler := TEpikTimer.Create(Self)
188+ {$endif}
189+end;
190+
191+procedure TMyClass.MethodToBeProfiled;
192+begin
193+ {$ifdef PROFILING}
194+ profiler.Clear;
195+ profiler.Start;
196+ {$endif}
197+ // do stuff
198+ {$ifdef PROFILING}
199+ OPDebugLn('TMyClass.MethodToBeProfiled ' + FloatToStr(profiler.Elapsed));
200+ {$endif}
201+end;
202+```
203+
204+### Приложение ETDemo
205+
206+Приложение ETDemo не требует установки EpikTimer для компиляции и работы. Мне никогда не нравилось устанавливать палитру, полную компонентов, только для того, чтобы узнать, что мне не понравился ни один из них! :)
207+
208+**Установка**
209+
210+- Окройте etdemo.lpi
211+- Скомпилируйте
212+- Запустите
213+
214+### Консольное приложение
215+
216+Если у вас нет экземпляра объекта «Приложение», описанного выше, просто создайте экземпляр EpikTimer следующим образом. Он должен быть освобожден вручную, когда в нем отпадет нужда:
217+
218+``` pascal
219+ ET := TEpikTimer.Create(nil)
220+ ... здесь ваш код ...
221+ ET.Free;
222+```
223+
224+### См. также
225+
226+- [[doc:fcl/fptimer/index.html|FPTimer included with FPC/Lazarus]]
227+- [[Yet another Running Timer]]
228+
229+---
230+*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).*
231+Category: Components

Back to history