GARANTIR DESCONTO

Fórum Abortar thread #277003

13/04/2005

0

Olá amigos estou com um problema com threads.

É o seguinte no on activate do meu form executo uma thread que dá um refresh em algumas tabelas, está funcionando legal,porém, se thread naum acabou de executar(tipo ela tá dando refrest em uma tabela que demora uns 6 segundos ) e eu mandar fechar o form minha aplicação trava. A duvida é o seguinte como faço pra abortar essa minha thread no close desse form ?


Alexandre_sbo

Alexandre_sbo

Responder

Posts

13/04/2005

Beppe

Thread.Terminate


Responder

Gostei + 0

13/04/2005

Massuda

Como o Beppe escreveu, você pode executar no seu form principal o método Terminate da sua thread e [b:905fe661ed]dentro do método Execute[/b:905fe661ed] da sua thread você verifica se a propriedade [b:905fe661ed]Terminated[/b:905fe661ed] está True; se estiver, você deve interromper a execução da thread.

Geralmente não tem como interromper um processo envolvendo BD (especialmente BD SQL). Isso significa que o seu problema, a princípio, não tem solução.

Uma alternativa seria exibir um aviso para o usuário do tipo ´Encerrando o programa´ enquanto a thread não encerra.


Responder

Gostei + 0

13/04/2005

Alexandre_sbo

vlw pela ajuda....
o Terminated e Terminate eu já conhecia e o meu problema é o que o massuda disse:
Geralmente não tem como interromper um processo envolvendo BD (especialmente BD SQL). Isso significa que o seu problema, a princípio, não tem solução.


só mais uma duvida rapida, o ibexpert tem um esquema que rola em thread um script e tem a opção de abortar . Será que tem como abortar um execução sql ? Se alguém souber por favor me de um toque...


Responder

Gostei + 0

13/04/2005

Beppe

Não sei se esta é uma boa dica, mas pode chamar Halt; que encerra o programa. Não sei quais consequencias terá no BD, pq o término é sem ´aviso-prévio´. Código de [b:77a42f3315]finalization[/b:77a42f3315] não será mais executado após esta chamado, então atenção.


Responder

Gostei + 0

13/04/2005

Alexandre_sbo

VLW pela dica Beppe , mas meu problema é que naum posso terminar o programa, e sim tirar o form que está rodando a thread da memoria....


Responder

Gostei + 0

13/04/2005

Massuda

Teoricamente, uma solução mais radical seria usar a função TerminateThread da API do Windows (não testei)...
var
  MinhaThread: TThread;
...
  MinhaThread.Resume;

  // thread em execução

  // "mata" a thread
  TerminateThread(MinhaThread.Handle, 0);
Não sei quais seriam as consequencias de terminar uma operação no BD dessa forma.


Responder

Gostei + 0

13/04/2005

Gandalf.nho

Não entendo muito de threads, mas não seria possível impedir o fechamento do form enquanto a thread não terminasse?


Responder

Gostei + 0

13/04/2005

Massuda

...não seria possível impedir o fechamento do form enquanto a thread não terminasse?
Seria outra forma de abordar o problema... se for uma única thread, dá para usar uma flag global que poderia ser atualizada, por exemplo, no evento OnTerminate da thread ou no término do método Execute da thread. Essa flag seria usada no evento OnCloseQuery do form.


Responder

Gostei + 0

13/04/2005

Alexandre_sbo

vlw Massuda...
[b:6256598bf5]o codigo:[/b:6256598bf5]
TerminateThread(MinhaThread.Handle, 0);

funcionou o form naum fica mais travado.....


Responder

Gostei + 0

13/04/2005

Alexandre_sbo

olhá eu novamente.....
entaum o codigo :
TerminateThread(MinhaThread.Handle, 0);

fechou o form sem travar a aplicação, só que dai se eu tenho outro form aberto e tentar clicar em um botao por exemplo, quando ele clico no botao trava a aplicação...


Responder

Gostei + 0

13/04/2005

Beppe

Qual thread criou o form? O que o botão faz?


Responder

Gostei + 0

13/04/2005

Alexandre_sbo

o form do botao naum tem thread ....é uma aplicação mdi
e o form do botao já estava aberto ,quando abortei a thread do outro form, e qq coisa que eu fizer no botao trava


Responder

Gostei + 0

13/04/2005

Beppe

Tente fechar o form e destruí-lo antes de terminar a thread.


Responder

Gostei + 0

13/04/2005

Massuda

...e o form do botao já estava aberto ,quando abortei a thread do outro form, e qq coisa que eu fizer no botao trava
O que esse botão faz?


Responder

Gostei + 0

13/04/2005

Alexandre_sbo

cria outro form por exemplo..


Responder

Gostei + 0

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

Aceitar