Sign in Join
Wiki copytemporary

Revision 2 of 3, by WikiArchive on 11-4-2026. The page as it is now.

EpikTimer/fr

Contents

A propos

EpikTimer un chronomètre pour le programmeur qui est capable de mesurer des événements très court avec une précision traçable sur de longues périodes de temps. Il est simple à utiliser, consomme pratiquement pas de temps processeur et ne nécessite que 25 octets de RAM pour mettre en œuvre une instance de l'horloge. Le composant fournit un seul temporisateur interne... mais un nombre illimité peut être déclarée extérieurement et lié à un seul composant EpikTimer sur le formulaire(form).

Le téléchargement contient le composant, un paquet d'installation et une application de démonstration, qui illustre les caractéristiques du composante ainsi que certains outils pour évaluer les sources d'horloge sur un système donné.

Ce composant a été conçu pour des applications multi-plateformes et a été écrit spécifiquement pour l'IDE Lazarus et le compilateur Free Pascal et comprend une application de démonstration.

Auteur

Tom Lisjac

Contributeurs

Licence

LGPL (veuillez contacter l'auteur si la licence LGPL ne correspond pas avec la licence de votre projet)

Subversion

pascal
svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/epiktimer epiktimer

Téléchargement

La dernière version stable peut être trouvée sur la page des fichiers Lazarus CCR ou ici.

Statut: Production/Stable

Change Log

  1. initial beta release
  1. Revised logic around hardware detection to prevent executing extended instructions if the HasCapabilityData call returns false.
  2. Removed exposed low level diagnositic functions from unit interface.
  3. Revised demo.
  1. Updated 0.2 version to make it compile on the latest Lazarus (0.9.10).
  2. Added LCL to the required packages.
  3. Changed mode to Delphi in order to compile.
  4. Changed windows timebase to use QueryPerformanceCounter, because has a much greater precision then GetSystemTime.
  5. Added changes to ensure the component compiles on Delphi 7.0
  6. Made tests on Windows and Linux
  7. Small changes to the demo to make it compile
  1. Changes for 64 bits operation
  2. Added units BaseUnix, Unix and UnixUtil, removed oldlinux (obsolete)
  3. Gettimeofday -> fpGettimeofday
  4. Changed systemsleep for 64 bits systems
  5. Some changes in timeval
  6. Tested on AMD64 (linux)

Dépendances / Configuration requise

Testé sur:

Issues: Besoins de test sur FreeBSD et de plus vieilles machines qui manquent de matériel TSC.

Installation

Usage

Drop the component on a form. The component contains a single timer instance and parameterless calls to start, stop, elapsed and clear will implicitly reference it.

If the timer is named ET

pascal
uses epiktimer;
    
    var
      ET: TEpikTimer;
    
    procedure InitTimer;
    begin
      ET := TEpikTimer.Create(Application);
    end;
    
    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;

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. An example would be:

pascal
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 if a given amount of time has elapsed before continuing with a task or to another iteration of the same task.

pascal
DelayInSeconds := 8.5; // or any value
    OldTime := ET.Elapse;
    
    while ((ET.Elapsed - OldTime) < DelayInSeconds) do
    begin
      ET.SystemSleep(10);
    end;
    
    // DelayInSeconds has elapsed and now you can continue executing the code

See etdemo.pas for additional examples of component usage

EpikTimer as a profiler

EpikTimer can be used to profile the speed of procedures:

pascal
uses
      {$ifdef PROFILING}epiktimer,{$endif}
      ...
    
    type
      TMyClass = class
      private
        {$ifdef PROFILING}
        profiler: Tepiktimer;
        {$endif}
        ...
      end;
    
    implementation
    
    constructor TMyClass.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
    
      ...
    
      {$ifdef CARDROOM_PROFILING}
      profiler := TEpikTimer.Create(Self)
      {$endif}
    end;
    
    procedure TMyClass.MethodToBeProfiled;
    begin
      {$ifdef PROFILING}
      profiler.Clear;
      profiler.Start;
      {$endif}
      // do stuff
      {$ifdef PROFILING}
      OPDebugLn('TMyClass.MethodToBeProfiled ' + FloatToStr(profiler.Elapsed));
      {$endif}
    end;

The ETDemo Application

The ETDemo application does not require EpikTimer to be installed in order to compile and operate. I never liked having to install a palette full of components only to find out that I didn't like any of them! :)

Installation

Original contributors

This page has been converted from epikwiki. Original content by Tom Lisjac.


From the Free Pascal wiki, page "EpikTimer/fr", as the Internet Archive kept it on 2023-03-30. 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.