Parametro no execute de uma thread
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 !!!!
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
Curtidas 0
Melhor post
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
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
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?
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
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.
1-Cria a thread suspensa.
2-Passa os valores.
3-Ativa a execução da thread.
GOSTEI 0
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
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
26/04/2005
não sei se é o que você quer, mas eu passo parametros em threads assim:<br /><br />
<br /><br />
<br /><br />
<br />
Thread th = new Thread(() => processaCep(i.ToString()));<br /><br />
th.Start();<br />
GOSTEI 0