Array
(
)

A thread nao era pra rodar independente do sistema?

Tiagops
   - 18 jan 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!

#Código

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.



Massuda
   - 18 jan 2006

Você não deveria chamar o método TThread.Execute. O correto seria...#Código

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.


Tiagops
   - 18 jan 2006

Show!

Valeu


Martins
   - 18 jan 2006


Citação:
Você não deveria chamar o método TThread.Execute. O correto seria...#Código

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 Massuda, cara sou teu fã, :D