Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Objeto para Medir el Tiempo de Ejecución de un Proceso (https://www.clubdelphi.com/foros/showthread.php?t=85267)

nlsgarcia 22-02-2014 06:42:57

Objeto para Medir el Tiempo de Ejecución de un Proceso
 
Club Delphi,

Revisen este código:
Código Delphi [-]
unit CounterTime;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type

  TCounterTime = object
  private
    Frecuencia, ITime, FTime : Int64;
    TimeLapse : String;
    Hours, Minutes, Seconds, Milliseconds : Int64;
    TotalTime : TDateTime;
  public
    procedure StartCounterTime;
    procedure CalculateCounterTime;
    procedure StopCounterTime;
    procedure DisplayCounterTime;
  end;

implementation

procedure TCounterTime.StartCounterTime;
begin
   // Retrieves the frequency of the high-resolution performance counter
   QueryPerformanceFrequency(Frecuencia);

   // Inicio de Conteo de Tiempo
   QueryPerformanceCounter(ITime);
end;

procedure TCounterTime.StopCounterTime;
begin
   // Fin de Conteo de Tiempo
   QueryPerformanceCounter(FTime);
end;

procedure TCounterTime.CalculateCounterTime;
begin
   // Calculo del Tiempo Total del Proceso expresado en Milisegundos
   Milliseconds := (FTime-ITime) * 1000 div Frecuencia;

   // Conversión de Milisegundos a Horas, Minutos, Segundos y el resto en Milisegundos
   Hours := Milliseconds div (1000*60*60);
   Minutes := Milliseconds mod (1000*60*60) div (1000*60);
   Seconds := Milliseconds mod (1000*60*60) mod (1000*60) div 1000;
   Milliseconds := Milliseconds mod (1000*60*60) mod (1000*60) mod 1000;

   // Conversión de las variables de tiempo a TDateTime
   TotalTime := EncodeTime(Hours,Minutes,Seconds,Milliseconds);
end;

procedure TCounterTime.DisplayCounterTime;
begin
   // Formateo del tiempo calculado
   TimeLapse := 'El Tiempo de Ejecución del Proceso fue : ';
   TimeLapse := TimeLapse + FormatDateTime('hh:nn:ss:zzz', TotalTime);

   // Visualización del Tiempo Trascurrido
   MessageDlg(TimeLapse,mtInformation,[mbOK],0);
end;

end.
El código anterior implementa el objeto TCounterTime para medir el tiempo de ejecución de un proceso, el cual permite crear una instancia del mismo de forma directa.

Revisen este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses CounterTime;

{$R *.dfm}

// Calcular el tiempo de un proceso por medio del objeto TCounterTime
procedure TForm1.Button1Click(Sender: TObject);

   procedure MonitoredProcess(T : Int64);
   begin
      Sleep(T);
   end;

var
   T : TCounterTime;

begin

   // Inicio de Conteo de Tiempo
   T.StartCounterTime;

   // Proceso a monitorear el tiempo de ejecución
   MonitoredProcess(2859);

   // Fin de Conteo de Tiempo
   T.StopCounterTime;

   // Calculo del Tiempo Total del Proceso
   T.CalculateCounterTime;

   // Visualización del Tiempo Trascurrido
   T.DisplayCounterTime;

end;

end.
El código anterior utiliza el objeto TCounterTime para medir el tiempo de ejecución de un proceso.

Nota: El tipo object permite instanciar objetos sin usar el método Create y es muy util para implementaciones de tipos abstractos simples, para desarrollos formales orientados a objetos se debe usar el tipo Class.

Espero sea útil :)

Nelson.

ElKurgan 22-02-2014 14:11:09

Muy interesante. Gracias por el aporte, amigo

Saludfos


La franja horaria es GMT +2. Ahora son las 14:19:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi