Fórum Parametro no execute de uma thread #278885

26/04/2005

0

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

Responder

Post mais votado

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.


Massuda

Massuda
Responder

Gostei + 1

Mais Posts

26/04/2005

Massuda

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;
...



Responder

Gostei + 1

26/04/2005

Colerapunk

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?


Responder

Gostei + 0

26/04/2005

Kapak

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


Responder

Gostei + 0

26/04/2005

Colerapunk

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


Responder

Gostei + 0

05/05/2018

Fabio Albuquerque

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 />
Responder

Gostei + 0

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

Aceitar