O programa continua sendo rodado após finalizado..

Delphi

03/10/2005

Eu fecho o programa.. e ele continua rodando no Windows..
tanto que o Delphi age como se ele tivesse rodando..

Se eu comento minha primeira tentativa de usar Thread.. ele funciona direito.. então o erro tá nela..

você me permitem colar aqui?

Quando o Cliente TCP do indi conectar:
procedure Tlincenet.IdTCPClient1Connected(Sender: TObject);
var
temp : checamsg;
begin
temp := checamsg.cria;
end;


O Thread é:
type
checamsg = class(TThread)
private
  public
  procedure Execute; OverRide;
  constructor cria;
  procedure Analizar_Mensagem_Recebida(temp : string);
  procedure T;
  procedure proceder;
end;



As procedures são:

constructor checamsg.cria;
begin
FreeOnTerminate := true;
Suspended := false;
if not lincenet.IdTCPClient1.Connected then
  begin
  Terminate;
  end
   else
   begin
   proceder;
   end;
end;

procedure checamsg.proceder;
begin
while lincenet.IdTCPClient1.Connected do
 begin
  try
  Analizar_Mensagem_Recebida(lincenet.IdTCPClient1.ReadLn);
  except
  lincenet.IdTCPClient1.Disconnect;
  end;
 Application.ProcessMessages;
 end;
end;

procedure checamsg.Analizar_Mensagem_Recebida(temp : string);
begin
temp := lincenet.D(temp);
lincenet.debug(temp);
end;

procedure checamsg.Execute;
begin
end;

procedure checamsg.T;
begin
Terminate;
end;



há algo errado?


Amon-ra

Amon-ra

Curtidas 0

Respostas

Beppe

Beppe

03/10/2005

O código referente a ´thread´ deve ficar no Execute. Como vc chama proceder no criar, não caracteriza multi-programação, o código executa no contexto da thread chamadora. Remova tbm o Application.ProcessMessages. Se quer atualizar a tela, mova o código específico para um método e o chame com Synchronize(NomeDoMetodo)


GOSTEI 0
POSTAR