Você está na página 1de 4

Toda la complejidad de los hilos de ejecucin que se programan en la API de Windows

quedan encapsulados en Delphi en esta sencilla clase. Para crear un hilo de ejecucin basta
heredar de la clase TThread y sobrecargar el mtodo Execute:
type
THilo = class(TThread)
procedure Execute; override;
end;

En la implementacin del procedimiento Execute es donde hay que introducir el cdigo


que queremos ejecutar cuando arranque nuestro hilo de ejecucin:
{ THilo }
procedure THilo.Execute;
begin
inherited;
end;

Veamos un ejemplo sencillo de un hilo de ejecucin con un contador de 10 segundos.


CREANDO UN CONTADOR DE SEGUNDOS
Voy a crear un nuevo proyecto con un formulario en el que slo va a haber una etiqueta
(TLabel) llamada EContador con el contador de segundos:

A este formulario lo he llamado FPrincipal. En la interfaz del mismo voy a definir la clase
TContador que va a heredar de un hilo TThread:
type
TContador = class(TThread)
dwTiempo: DWord;
iSegundos: Integer;
Etiqueta: TLabel;
constructor Create; reintroduce; overload;
procedure Execute; override;
end;

He sobrecargado el constructor para que inicialice mis contadores de tiempo y segundos:


constructor TContador.Create;

begin
inherited Create(True); // llamamos al constructor del padre (TThread)
dwTiempo := GetTickCount;
iSegundos := 0;
end;

La funcin GetTickCount nos devuelve un nmero entero que representa el nmero de


milisegundos que han pasado desde que encendimos nuestro PC. Si queris ms precisin
podis utilizar la funcin TimeGetTime declarada en la unidad MMSystem (sobre todo si
vais a programar videojuegos).
Siguiendo con la implementacin de nuestra clase TContador, la variable dwTiempo la
voy a utilizar para controlar el nmero de milisegundos que van pasando desde que
ejecutamos el hilo. Y la variable iSegundos es un contador de segundos de 0 a 10. Tambin
he aadido una referencia a una Etiqueta de tipo TLabel que se la daremos al crear una
instancia del hilo en el evento OnCreate del formulario principal:
procedure TFPrincipal.FormCreate(Sender: TObject);
begin
Contador := TContador.Create(True);
Contador.Etiqueta := EContador;
Contador.FreeOnTerminate := True;
Contador.Resume;
end;

Despus de crear el hilo le pasamos la etiqueta que tiene que actualizar y le decimos
mediante la propiedad FreeOnTerminate que se libere de memoria automticamente al
terminar la ejecucin del hilo.
Despus llamamos al mtodo Resume que lo que hace internamente es ejecutar el
procedimiento Execute de la clase TThread que tendr este cdigo:
procedure TContador.Execute;
begin
inherited;
// Contamos hasta 10 segundos
while iSegundos < 10 do
// Han pasado 1000 milisegundos?
if GetTickCount - dwTiempo > 1000 then
begin
// Incrementamos el contador de segundos y actualizamos la etiqueta
Inc(iSegundos);
Etiqueta.Caption := IntToStr(iSegundos);
dwTiempo := GetTickCount;
end;
end;

Creamos un bucle cerrado que va contando de 1000 en 1000 milisegundos e incrementando


el contador de segundos. Cuando se salga de este bucle se terminar la ejecucin del hilo
automticamente. Tambin se poda haber utilizado procedimiento Sleep, pero nunca me ha

gustado mucho esta funcin porque miestras se est ejecutando no podemos hacer
absolutamente nada.
Eso ocurrir al ejecutar el programa y cuando llegue el contador a 10:

Podemos ver como va la ejecucin del hilo en la ventana inferior de Delphi si estamos
ejecutando el programa en modo depuracin:

Como puede verse en las lneas en rojo, el hilo que hemos creado tiene el ID 3736 que no
tiene nada que ver con el hilo primario:

Si en cualquier momento queremos detener la ejecucin del hilo:


Hilo.Terminate;
FreeAndNil( Hilo );

Ejemplo:
http://www.hackerdude.com/courses/delphi/Cap011.1.html

Referencia
http://delphiallimite.blogspot.mx/2009/05/los-hilos-de-ejecucion-1.html
http://delphiallimite.blogspot.mx/2006/07/cmo-crear-un-hilo-deejecucin.html
http://www.clubdelphi.com/foros/showthread.php?t=79939
http://www.thecoldsun.com/es/content/12-2008/programacion-multihilo-endelphi-tthread-y-sincronizacion-basica

Tutorial de aplicacin en 3 cpas

http://trabajandocondelphixe.blogspot.mx/2012/03/ejemplo-aplicacion-conbase-de-datos-de.html

Você também pode gostar