Guest Squall Leonhart GT-R Postado Março 14, 2007 Denunciar Share Postado Março 14, 2007 aí galeraComo eu faço para "matar" uma Thread de dentro do evento OnTimer de um Timer que eu criei dentro dessa Thread?Grato Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Squall Leonhart GT-R Postado Março 14, 2007 Denunciar Share Postado Março 14, 2007 Niguém sabe como fazer? ou se é possível ou se existe outra maneria de fazer algo parecido, sei lá Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Março 14, 2007 Denunciar Share Postado Março 14, 2007 Poste esta parte do seu código, pois existem 2 (ou mais) métodos de secriar uma Thread, um usando somente a API do Windows, e outro usandoo 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 praalguém poder te ajudar...abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Squall Leonhart GT-R Postado Março 14, 2007 Denunciar Share Postado Março 14, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Março 16, 2007 Denunciar Share Postado Março 16, 2007 Squall Leonhart GT-R, a chamada à Terminate não está encerrando a Thread? Caso a conexão (do socket) for encerrada, isso também deverá provocar o encerramento da sua Thread. Voce não poderia fazer isto - desconectar? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Squall Leonhart GT-R Postado Março 19, 2007 Denunciar Share Postado Março 19, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Squall Leonhart GT-R Postado Março 19, 2007 Denunciar Share Postado Março 19, 2007 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? heheheAlguém tem idéia o porque?Grato Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Squall Leonhart GT-R Postado Março 19, 2007 Denunciar Share Postado Março 19, 2007 ResolvidoTirei o Timer1.Free;Quando a Thread for liberada da memória o Timer1 vai junto, certo? afinal eu criei ele dentro da ThreadGrato a todos que ajudaram ou pelo menos tentaram Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest Squall Leonhart GT-R
aí galera
Como eu faço para "matar" uma Thread de dentro do evento OnTimer de um Timer que eu criei dentro dessa Thread?
Grato
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
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.