A thread nao era pra rodar independente do sistema?

Delphi

18/01/2006

O codigo abaixo, só atualiza o label, depois de passar os 6seg do sleep que esta dentro da thread. Não era pra disparar a thread independente e comecar a atualizar o label antes de passar os 6 seg ?

Obrigado!

unit Unit1;

interface

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

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

TXThread = class( TThread )
  protected
     procedure Execute; override;
  end;

var
  Form1: TForm1;
  T1 : TXThread;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  T1 := TXThread.Create(True);
  T1.Execute;
  Timer1.Enabled := True;
end;

procedure TXThread.Execute;
begin

  sleep(6000);

end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.caption := TimeToStr(Time);
end;

end.



Tiagops

Tiagops

Curtidas 0

Respostas

Massuda

Massuda

18/01/2006

Você não deveria chamar o método TThread.Execute. O correto seria...
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  T1 := TXThread.Create(True); 
  T1.Resume; 
  Timer1.Enabled := True; 
end; 
Como a thread é criada suspensa (o True no TThread.Create), ela só inicia a execução se você chamar TThread.Resume.

Como você está chamando diretamente TThread.Execute, esse método é executado dentro da thread principal do programa, não dentro da thread que você criou.


GOSTEI 0
Tiagops

Tiagops

18/01/2006

Show!

Valeu


GOSTEI 0
Martins

Martins

18/01/2006

Você não deveria chamar o método TThread.Execute. O correto seria...
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  T1 := TXThread.Create(True); 
  T1.Resume; 
  Timer1.Enabled := True; 
end; 
Como a thread é criada suspensa (o True no TThread.Create), ela só inicia a execução se você chamar TThread.Resume. Como você está chamando diretamente TThread.Execute, esse método é executado dentro da thread principal do programa, não dentro da thread que você criou.


Boa [b:5532b6a6ab]Massuda[/b:5532b6a6ab], cara sou teu fã, :D


GOSTEI 0
POSTAR