Parametro no execute de uma thread

Delphi

26/04/2005

Galera será que é possivel passar parametros no metodo execute de uma thread?

Por Exemplo
MinhaThread = class(TThread)
procedure execute(NumInner : Integer; Cod_Barra:string); override;

Possuo uma unit com varios procedimentos de verificacao de dados de catracas eletronicas
Essas verificacaoes sao feitas atraves de threads, precisava de passar alguns parametros no metodo execute

Por exemplo Catraca Modelo RodBel Eu chamaria o metodo execute da thread q esta na Unit chamada MODELORODBEL, passando os parametros necessario para verificar os dados

Do jeito que eu fiz esta funcionando. So que os dados sao preenchidos em variaveis na Unit Principal do programa e as Units que possuem as thread leem essas variaveis

Se alguem tiver alguma dica ....

Valeu !!!!


Colerapunk

Colerapunk

Curtidas 0

Melhor post

Massuda

Massuda

26/04/2005

Antes de chamar o metodo execute precisava de preencher as variaveis.
Mas você não deve chamar diretamente o método Execute de um TThread... esse método é disparado internamente pela classe quando a thread estiver pronta para ser executada.

Do modo como você escreveu...
ThreadTopData.valor1 := 1; ThreadTopData.valor2 := ´125´; ThreadTopData.execute(false);
...faz com que a execução não seja multithread, já que quando você executa diretamente o Execute da thread, você faz com que essa execução ocorra na thread principal do seu programa, não em uma thread separada.


GOSTEI 1

Mais Respostas

Massuda

Massuda

26/04/2005

O método Execute é disparado internamente pela classe TThread. Para poder usar ´parâmetros´ você pode fazer algo assim:
type
  TMinhaThread = class(TThread)
  ...
  protected
    procedure Execute; override;
  public
    Valor1: Integer;
    Valor2: string;
    ...
  end;
....
procedure TMinhaThread.Execute;
begin
  ...
  // usa Valor1, Valor2
  ...
end;

// exemplo de uso da thread
var
  Thread: TMinhaThread;
...
  Thread := TMinhaThread.Create( True);
  Thread.Valor1 := ...
  Thread.Valor2 := ...
  Thread.Resume;
...



GOSTEI 1
Colerapunk

Colerapunk

26/04/2005

precisava de passar os parametros na unit principal tipo assim

UNIT PRINCIPAL
..........................

ThreadTopData.valor1 := 1;
ThreadTopData.valor2 := ´125´;
ThreadTopData.execute(false);
..........................

UNIT INDIVIDUAL DA CATRACA
..................................................
procedure ThreadTopData.execute;
begin
VerificaDados(VALOR1, VALOR2);
FreeOnTerminate := True;
end;
....................................................


Antes de chamar o metodo execute precisava de preencher as variaveis.
Teria Como fazer isso?


GOSTEI 0
Kapak

Kapak

26/04/2005

Mas é isso mesmo que o Massuda colocou.
1-Cria a thread suspensa.
2-Passa os valores.
3-Ativa a execução da thread.


GOSTEI 0
Colerapunk

Colerapunk

26/04/2005

Blz cara.....
Ainda bem q vc me avisou que eu estava fazendo errado, como havia falado o sistema tem q contrlar varias catracas ao mesmo tempo... na verdade funcionou, mas eu havia testado apenas controlando uma catraca.
Vou mudar e fazer do jeito q vc me disse

Valeu d+ pela ajuda


GOSTEI 0
Fabio Albuquerque

Fabio Albuquerque

26/04/2005

não sei se é o que você quer, mas eu passo parametros em threads assim:<br /><br />
<br /><br />
<br />
Thread th = new Thread(() => processaCep(i.ToString()));<br /><br />
                th.Start();<br />
GOSTEI 0
POSTAR