¡Buen día a todos!
He leído en diversos lugares (y lo he comprobado) que por lo general es preferible usar un hilo (
thread) de ejecución alterno en lugar de un temporizador (
timer), cuando se busca una buena precisión de tiempo (hasta de milisegundos) para llevar a cabo la acción temporizada.
Cuando se trata de crear un hilo de ejecución alterno, la ayuda de Delphi aconseja una forma básica de hacerlo, la cual consiste en crear una nueva clase de objeto derivada de
TThread, redefiniendo su método Execute para incluir en éste el código que deseamos se ejecute dentro del hilo.
Sin embargo, algunos desarrolladores han expresado su incomodidad por seguir este procedimiento, argumentando que es demasiado código el que hay que escribir sólo para hacer que el programa corra otro hilo en el fondo. Esto depende de la percepción que cada programador tiene en cada circunstancia específica de su trabajo (puede ser un proyecto de entrega urgente, una aplicación con varios hilos alternos, etc.).
Considerando todo lo anterior, hace tiempo me di a la tarea de crear una clase derivada de TThread, la cual llamé
TghThread. Tiene la ventaja de que al instanciar un objeto TghThread se pueden indicar como parámetros:
1. El nombre de un método que el hilo deberá ejecutar repetitivamente.
2. El intervalo de tiempo en milisegundos para que, a manera de temporizador preciso, dicho método se ejecute cada cierto tiempo.
Ejemplo:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IGHTareas;
type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
HiloReloj :TghThread;
Procedure Reloj;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Procedure TForm1.Reloj;
Begin
Label1.Caption := FormatDateTime ('hh:nn:ss.zzz', Time ());
End;
procedure TForm1.FormCreate(Sender: TObject);
begin
HiloReloj := TghThread.Crear (Reloj, 20);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
HiloReloj.Free;
end;
end.
Como puede observarse, con TghThread no es necesario crear una nueva clase de objeto para establecer un hilo adicional en nuestra aplicación. Puede usarse fácilmente como un temporizador de alta precisión, colocando el método a ejecutar en alguna forma o módulo de datos de nuestro programa. Obviamente este ejemplo de reloj en pantalla, como tal, no tiene mucha aplicación práctica que digamos, pero nos ilustra de manera sencilla lo que podríamos hacer cuando queramos que nuestra aplicación ejecute iterativamente y con alta frecuencia alguna tarea en particular.
TghThread es freeware, incluye los fuentes y forma parte de la biblioteca
Interfaz GH para Delphi 7. También pueden solicitármelo directamente, con toda confianza.
Un abrazo a todos.
Al González.