Ver Mensaje Individual
  #16  
Antiguo 16-01-2009
Avatar de white_zombie
[white_zombie] white_zombie is offline
Miembro Premium
 
Registrado: nov 2005
Ubicación: Zaragoza - España
Posts: 187
Reputación: 19
white_zombie Va por buen camino
A simple vista ha varias cosas que no estan bien, te recomiendo que para crear el hilo vayas a File-new-Other-Thread object, te pide el nombre que deseas darle al hilo en tu caso TMyhilo. Te queda esto.

Código Delphi [-]
unit Unit2;

interface

uses
  Classes;

type
  TMyhilo = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

implementation

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TMyhilo.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TMyhilo }

procedure TMyhilo.Execute;
begin
  { Place thread code here }
end;

end.

Para llamar a este hilo por ejemplo desde la unidad principal

Código Delphi [-]
unit Unit1;

interface

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

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

var
  Form1: TForm1;
  hilo:Tmyhilo;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
hilo:=Tmyhilo.Create(true);
hilo.Resume;
end;

Mas cosas, como veras que pone en el codigo del thread no se debe desde un hilo cambiar propiedades ni usar metodos de componentes visuales.
Para esto de usar Synchronize.

Un ejemplo

Código Delphi [-]
unit Unit2;

interface

uses
  Classes,windows;

type
  TMyhilo = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
    procedure update_label;
  end;

implementation

uses unit1;

procedure TMyhilo.Execute;
begin
  Synchronize(update_label);
end;

procedure TMyhilo.update_label;
begin
 form1.Label1.Caption:='Esto es una prueba';
end;

end.

Echale un vistazo a esto y comparalo con tu codigo.
Te recomiendo leer sobre el tema porque hay muchas cosas que saber antes de empezar a programar, los manuales que te recomende en mi primer post explica todo esto.

Última edición por white_zombie fecha: 16-01-2009 a las 22:43:12.
Responder Con Cita