Ir para conteúdo
Fórum Script Brasil
  • 0

Como "matar" Uma Thread?


Guest Squall Leonhart GT-R

Pergunta

7 respostass a esta questão

Posts Recomendados

  • 0

Poste esta parte do seu código, pois existem 2 (ou mais) métodos de se

criar uma Thread, um usando somente a API do Windows, e outro usando

o objeto TThread do Delphi... que aliás faz a mesma coisa só que mais fácil...

Postando a parte do seu código onde você quer pará-la talvez ajude pra

alguém poder te ajudar...

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Squall Leonhart GT-R

Segue parte do código

{ Construtor }
constructor TSock_Thread.Create(aSocket:TCustomWinSocket);
begin
 inherited Create(true); // cria suspensa
 Socket := aSocket; // passa o Socket
 Timer1 := TTimer.Create(nil);
 Timer1.Enabled := False;
 Timer1.Interval := 12000;
 Timer1.OnTimer := Timer1Timer;
 conta := '';
 conta2 := '';
 FreeOnTerminate := true; // libera automaticamente
end;

{ Principal }
procedure TSock_Thread.Execute;
var
msg, aux, resp, evento, auxevento, marca : String;
begin
  While Not Terminated And Socket.Connected Do
    Begin

...

    Sleep(1); // evita a CPU ficar em 100%
    End;

{ Timer para o Keep Alive }
procedure TSock_Thread.Timer1Timer(Sender: TObject);
begin
  //mostra no memo o evento
  Synchronize(Memo2timerka);

  //grava evento no banco de dados
  //passa parâmetros
  frmprincipal.sdsincluirimp.DataSet.ParamByName('PAREVENTO').AsString := Trim('Falha de Keep Alive');
  frmprincipal.sdsincluirimp.DataSet.ParamByName('PARCONTA').AsInteger := StrToInt(conta);
  frmprincipal.sdsincluirimp.DataSet.ParamByName('PARUSUARIO').AsString := Trim(frmprincipal.lblusuario.Caption);
  frmprincipal.sdsincluirimp.DataSet.ParamByName('PARDATA').AsDate := Date;
  frmprincipal.sdsincluirimp.DataSet.ParamByName('PARHORA').AsTime := Time;

  //executa SQL
  frmprincipal.sdsincluircom.Execute;
  //dá alerta de evento
  frmprincipal.Timerled.Enabled := True;

  Terminate;// quero terminar a Thread aqui
end;

Grato

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Squall Leonhart GT-R

Micheus,

Então cara, não está encerrando não, porque a função OnTimer do Timer1, fica executando sem parar, se tivesse encerrado a Thread o Timer seria encerrado junto, não seria? se caso não encerre, como eu poderia encerrá-lo junto, tentei mudar o enabled, usar o free, mas dentro do OnTimer ele não permite eu fazer essas operações...

Grato

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Squall Leonhart GT-R

Cara,

Você me deu uma luz hehehe, fiz umas alterações no Execute, e quase fuincionou, agora está dando um erro muito louco...

While Not Terminated Do
    Begin
    If Socket.Connected Then
      If Socket.ReceiveLength > 0 Then // evita o evento onClientRead
        Begin

...

        End;
    Sleep(1); // evita a CPU ficar em 100%
    End;
    Timer1.Enabled := False;
    Timer1.Free;
end;

Aparece esse erro, quando eu volto o foco para a minha aplicação, ou seja, quando eu clico em cima da aplicação com o mouse ou clico na aplicação na barra de tarefas ou atrávez de Alt + Tab; Ou quando perde o foco;

"Access Violation At Adreess 0000000. Read Os Adreess 000000"

E as vezes quando eu mando rodar denovo logo após aparecer esse erro, dá outro erro

"System error. Code 1400. O identificador da janela é inválido"

E agora? hehehe

Alguém tem idéia o porque?

Grato

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Squall Leonhart GT-R

Resolvido

Tirei o Timer1.Free;

Quando a Thread for liberada da memória o Timer1 vai junto, certo? afinal eu criei ele dentro da Thread

Grato a todos que ajudaram ou pelo menos tentaram

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...