Nunca ha sido tan fácil utilizar los threads

.
La suite VCL "abfcomponents" incorpora un componente llamado TabfThreadComponent que encapsula el objeto tThread que simplifica enormemente la programación con hilos.

Para utilizarlo instalar la suite como se hace habitualmente y arrastrar el componente anterior a vuestro form.

Incorpora 4 eventos: OnException, OnExecute, OnTerminate, OnFinish, pues bien para ejecutar un prodimiento cualquiera en un thread simplemente hay que colocarlo en el evento OnExecute, así de fácil y nos olvidamos de definir el thread y demás historias, ya que eso lo hace el componente por nosotros.

Definición del evento OnExecute:

procedure TForm1.abfThreadComponent1Execute(Sender: TObject);
begin
// incluir aquí la llamada al procedimiento que hayamos definido en nuestra unit
end;
Y para lanzar el hilo teclear:
abfThreadComponent1.Execute;

Dado que no he encontrado mucho código en internet, si mis estimados lectores pueden postear código o indicar alguna web que lo contenga sería de agradecer y muy útil para todos.


Link:

3 comentarios:

  1. En realidad asi funciona una thread, el codigo completo seria asi:

    //Tarea que vigila el registro de windows
    unit UnitThReadReg;

    interface

    uses
    Windows, Classes, Registry;

    type
    TTimeEvent = procedure(Sender: TObject) of object;
    ThreadReg = class(TThread)
    private
    { Private declarations }
    maquina: string;
    estado: boolean;
    resultado: boolean;
    primeraVez: boolean;
    FOnActivada: TTimeEvent;
    FOnDesactivada: TTimeEvent;
    protected
    procedure Execute; override;
    procedure Activada(); dynamic;
    procedure Desactivada(); dynamic;
    procedure LeerRegistro();
    public
    constructor Create(omaquina: string);
    property OnActivada: TTimeEvent
    read FOnActivada write FOnActivada;
    property OnDesactivada: TTimeEvent
    read FOnDesactivada write FOnDesactivada;
    end;

    implementation

    constructor ThreadReg.Create(omaquina: string);
    begin
    maquina := omaquina;
    primeraVez := False;
    resultado := False;
    inherited Create(False);
    end;

    procedure ThreadReg.Execute;
    begin
    FreeOnTerminate := True;
    Priority := TThreadPriority(tpNormal);
    LeerRegistro();
    end;

    procedure ThreadReg.Activada();
    begin
    if Assigned(FOnActivada) then
    FOnActivada(Self);
    end;

    procedure ThreadReg.Desactivada();
    begin
    if Assigned(FOnDesactivada) then
    FOnDesactivada(Self);
    end;

    procedure ThreadReg.LeerRegistro();
    var
    Reg: TRegistry;
    begin
    while True do
    begin
    Reg := Tregistry.Create;
    try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('Software\DatCom\' + maquina, True) then
    begin
    try
    resultado := Reg.ReadBool('Salida Digital');
    finally
    Reg.CloseKey;
    end;
    end;
    finally
    Reg.Free;
    end;
    if primeraVez = False then
    begin
    primeraVez := True;
    estado := resultado;
    end
    else
    begin
    if (resultado = True) and (estado = False) then
    Synchronize(Activada);
    if (resultado = False) and (estado = True) then
    Synchronize(Desactivada);
    estado := resultado;
    end;
    if Terminated then
    Break;
    SleepEx(100, False);
    end;
    end;

    end.

    // Y asi se utiliza
    uses
    UnitThReadReg
    var
    ReadReg: array of ThreadReg;

    function xxxx();
    begin
    ReadReg[maquina] := ThreadReg.Create(Lnombre[maquina].Caption);
    case maquina of
    1: ReadReg[maquina].OnActivada := CadaActivadaSD01;
    2: ReadReg[maquina].OnActivada := CadaActivadaSD02;
    end;
    case maquina of
    1: ReadReg[maquina].OnDesactivada := CadaDesactivadaSD01;
    2: ReadReg[maquina].OnDesactivada := CadaDesactivadaSD02;
    end;
    end;

    ResponderEliminar
  2. Hola, hay una librería que implementa hilos de ejecución,ademas de poder hacer aplicaciones multihilo con threadpool dinámicos y estáticos, muy fácil de usar. Yo lo utilizo en mi aplicación y me funciona muy bien.
    se llama FasterThead
    http://kuzin-online.zzl.org/fasterthread.html

    Si alguno le sirve, le recomiendo utilizarlo. No es visual pero no es difícil usarlos.
    Saludos.

    ResponderEliminar
  3. Muchas gracias por el aporte, he probado las FasterThead
    y van muy bien

    ResponderEliminar