A thread nao era pra rodar independente do sistema?

18/01/2006

0

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

Responder

Posts

18/01/2006

Massuda

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.


Responder

18/01/2006

Tiagops

Show!

Valeu


Responder

18/01/2006

Martins

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


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar