EpikTimer/de
│
Deutsch (de) │
English (en) │
français (fr) │
русский (ru) │
(Befindet sich in Übersetzung...)
Beschreibung
EpikTimer ermöglicht dem Programmierer eine extrem genaue Zeitmessung - etwa für sehr kurz aufeinanderfolgende Ereigniss. Epiktimer lässt sich einfach verwenden, verbraucht keine CPU-Resourcen und benötigt nur 25 Bytes zusätzlichen RAM bei der Ausführung des Programms. Intern unterstützt diese Komponente einen einzigen Timer - extern kann jedoch eine beliebige Anzahl an Zeitmessungen deklariert und ausgeführt werden.
Die Komponente EpikTimer ist plattformunabhängig und wurde spezielle für die Lazarus-IDE sowie den FreePascal-Compiler geschrieben.
Autor
Unterstützer
- Felipe Monteiro de Carvalho
- Marcel Minderhoud
Lizenz
LGPL (Kontaktieren Sie den Autor, wenn die LGPL unvereinbar mit Ihrem Projekt ist)
Download
In der Downloaddatei sind die EpikTimer Komponente, zugehörige Installationsroutinen sowie ein Beispielprogramm zur Illustration der Fähigkeiten der Komponente.
Die neuste stabile Version gibt es auf der Lazarus CCR-Dateien Website oder hier.
Status: Production/Stable
Änderungs Log
- Initially written on 24-06-2003 TL
- Pre-release 30-06-2003 TL - Needs testing on the BSD's and Win32
- Version 0.1 1-7-2003 TL
- initial beta release
- Version 0.2 3-7-2003 TL
- Revised logic around hardware detection to prevent executing extended instructions if the HasCapabilityData call returns false.
- Removed exposed low level diagnositic functions from unit interface.
- Revised demo.
- Version 0.3 15-11-2005
- Updated 0.2 version to make it compile on the latest Lazarus (0.9.10).
- Added LCL to the required packages.
- Changed mode to Delphi in order to compile.
- Changed windows timebase to use QueryPerformanceCounter, because has a much greater precision then GetSystemTime.
- Added changes to ensure the component compiles on Delphi 7.0
- Made tests on Windows and Linux
- Small changes to the demo to make it compile
- Version 1.0 06-10-2006
- Changes for 64 bits operation
- Added units BaseUnix, Unix and UnixUtil, removed oldlinux (obsolete)
- Gettimeofday -> fpGettimeofday
- Changed systemsleep for 64 bits systems
- Some changes in timeval
- Tested on AMD64 (linux)
Abhängigkeiten / Systemvoraussetzungen
- Für eine nanosekundengenaue Zeitmessung wird eine Intel-Pentium-kompatible CPU mit einem "Timestamp Counter" benötigt.
- Eine mikrosekundengenaue Zeitmessung wird auf allen Systemen unterstützt.
Getestet auf den folgenden Systemen:
- Pentium IV 3,2Mhz (Unter Linux wie Windows mit großer Präzession (~ 3,220,000,000 ticks per second))
- Pentium 233Mhz unter Damm Small Linux. Arbeitet mit Hardware Uhr.
- Mobile AMD 64 Athlon 3200+ unter Windows XP Home (32 bit), Lazarus 9.13
- AMD 64 CPU, unter Ubuntu Linux 64 bit, Lazarus 9.18.
Issues: Muss noch unter FreeBSD sowie älteren Rechnern ohne TSC-Hardware getestet werden.
Installation
- Starten Sie Lazarus.
- Öffnen Sie im Menü "Komponenten -> Package-Datei öffnen" die Datei "etpackage.lpk".
- Kompilieren Sie die Komponente testweise, um sicher zu gehen, dass sie vollständig ist.
- Erstellen Sie Lazarus erneut unter "Werkzeuge -> Lazarus erstellen"
- Die Komponente EpicTimer erscheint nun in dem Reiter "System" (Stoppuhr-Icon)
Verwendung
Ziehen sie die Komponente auf ein Formular. Die Komponente beinhaltet eine Timer-Instanz, die parameterlos gestartet, gestoppt, abgefragt und zurückgesetzt werden kann.
Beispiel: Timer ET
Procedure InstrumentedCall; Begin ET.Clear; // optional... timer is cleared at creation ET.Start; ExecuteFirstTimedSection; ET.Stop; // the timer is actually paused and can be restarted later TimedSection1:=ET.Elapsed; // store the elapsed in a global MakeAnUntimedOverheadCall; // not counted in the timer ET.Start; //resume the timer... continue accumulating ticks CallTimedSection2; TimedSection2:=ET.Elapsed; //timer keeps running... we've just sample it. CallTimedSection3; CallSomethingElse; TimedSection3:=ET.Elapsed; //keep counting... tap the elapsed CallTimedSection4; TimedSection4:=ET.Elapsed; //keep counting... tap the elapsed ET.clear // done... timer is stopped and zeroed end;
Sie können aus einer einzigen Komponente eine beliebige Anzahl an Timer erstellen, indem Sie einen TimerData-record deklarieren. You can also create any number of timers from a single component on the form by declaring a TimerData record and passing it as a parameter to start, stop, elapsed and clear using the overloaded methods in the component. Ein Beispiel wäre:
Function TimedExecution:Extended; Var DiskAccessTime:TimerData; Begin ET.Clear(DiskAccessTimer); // Declared timers *must* be cleared before use. ET.Start(DiskAccessTimer); ExecuteTheTimedSection; Result:=ET.Elapsed(DiskAccessTimer); // the timer keeps running... etc...
One particular use for EpikTimer is checking is a given amount of time has elapsed before continuing with a task or to another iteration of the same task.
DelayInSeconds := 8.5; // oder einen beliebigen Wert OldTime := ET.Elapse; while ((ET.Elapsed - OldTime) < DelayInSeconds) do begin ET.SystemSleep(10); end; // DelayInSeconds ist abgelaufen und jetzt können sie mit der Ausführung des Codes fortfahren
Siehe etdemo.pas für zusätzliche Beispiele der Verwendung der Komponente.
Die ETDemo Anwendung
Zum Kompilieren und Ausführen der ETDemo Anwendung ist es nicht erforderlich, dass EpikTimer installiert ist. Ich mochte noch nie eine Palette voller Komponenten nur um herauszufinden, dass ich keine von ihnen mag! :)
Installation
- Öffnen sie etdemo.lpi
- Kompilieren
- Starten
Mitwirkende
Diese Seite wurde vom epikwiki konvertiert. Der originale Inhalt stammt von Tom Lisjac.