Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ejemplo sencillo para ejecutar Hilos en delphi (https://www.clubdelphi.com/foros/showthread.php?t=79939)

n03l 22-08-2012 22:38:37

Ejemplo sencillo para ejecutar Hilos en delphi
 
Buenas. estoy viendo en la web una guia de como crear hilos en delphi, pero estoy demasiado confundido y no allo la manera de echar a andar un ejemplo sencillo de como correr un hilo
tengo el siguiente codigo que estoy viendo en delphi.allimited

Código Delphi [-]
unit Unit2;

interface

uses
  Classes;

type
  THilo = class(TThread)
  Ejecutar: procedure of object;
  private

    { Private declarations }
  protected
    procedure Execute; override;
  end;

  var
  Hilo: THilo; // variable global o pública


implementation

 uses Unit1;

procedure THilo.Execute;
begin
 Ejecutar;
  Terminate;
end;
procedure CrearHilo;
begin
  Hilo.Ejecutar := Form1.ProcesarDatos;//aqui no me lo reconoce y eso que agregue un procedimiento de ese nombre en //Form1
  Hilo.Priority := tpNormal;
  Hilo.Resume;
end;

procedure ProcesarDatos;
begin
  // Este es el procedimiento que ejecutará nuestro hilo
  // Cuidado con hacer procesos críticos aquí
  // El procesamiento paralelo de XP no es el de Linux
  // Se puede ir por las patas abajo...
end;



end.

el problema que tengo esque no se como ejecutar el hilo, desde el Form principal. o si tiene un codigo fuente como para novatos se los agradeceria.
saludos.

Gerson12 23-08-2012 04:54:00

si no mal me equivoco quieres hacer como themaposter q existe para los uploader ?¿

Chris 23-08-2012 06:02:04

Estás seguro que ése código aparecía así en la Web original? O representa su propia intención de crear tus propios hilos? El código que nos compartes no tiene sentido y está todo mal.

Prueba con este código:
Código Delphi [-]
unit Unit2;

interface

uses
    Classes;

type
    THilo = class(TThread)
    private
        { Private declarations }
        FEjecutar: Procedure of Object;
    protected
        procedure Execute; override;
    published
        property Ejecutar: Procedure of Object read FEjecutar write FEjecutar;
    end;

    var
        Hilo: THilo; // variable global o pública (NO SON BUENA IDEA)


implementation
    uses Unit1;


// implentación de la clase THilo

procedure THilo.Execute;
begin
    // el procedimiento Execute contendrá todo el
    // código central del hilo. Si el hilo fuera
    // un árbol, Execute sería el tronco.
    
    // hacer los cálculos pesados

    // ...
    // ...
    // ...

    // notificar al formulario
    Synchronize(Self.Ejecutar);
    // (synchronize hace que este hilo se sincronice con el
    //  principal, para no interferir en las operaciones que
    //  el último pueda estar realizando. En este caso el
    //  hilo será suspendido [pausado] hasta que "Ejecutar"
    //  termine su ejecución.)
end;


procedure CrearHilo;
begin
    // Como crear el hilo?
    // los hilos se crean cómo cualquier otra clase en Delphi.
    Hilo := THilo.Create(CreateSuspended:=True);

    Hilo.Ejecutar := Form1.ProcesarDatos;
    Hilo.Priority := tpNormal;
    Hilo.Resume;
end;

procedure ProcesarDatos;
begin
  // Este es el procedimiento que ejecutará nuestro hilo
  // Cuidado con hacer procesos críticos aquí
  // El procesamiento paralelo de XP no es el de Linux
  // Se puede ir por las patas abajo...


end;

end.

Saludos!

Neftali [Germán.Estévez] 23-08-2012 09:50:29

Tienen razón en lo que te han dicho. Yo tampoco le veo sentido al código que has puesto. Le faltan cosas... :confused:
En la sección de ejemplos del FTP del club, si buscas por la palabra thread, encontrarás varios ejemplos completos con código.

En mi web, también puedes encontrar algunos ejemplos sobre threads, desde los más sencillos, como este o este otro, a alguno más complejo como este que trabaja con hilos para lanzar consultas con ADO en paralelo. Todos ellos tienen el código fuente. Bájalo, revísalo e intenta entenderlo.

Si tienes problemas, ya dirás...

n03l 23-08-2012 15:23:27

Ok, muchas gracias me sirvio bastante, ya lo solucione con la ayuda de todos Uds.
saludos


La franja horaria es GMT +2. Ahora son las 12:13:51.

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