Delphi - Aplicação não termina, alguém tem a solução?
Por exemplo um código simples do source project:
No debugador:
quando ele executa a linha do END, ele deveria encerrar toda a aplicação e limpar o executável da memória.
Acontece que as vezes ele encerra corretamente, mas as vezes algumas threats do próprio sistema ficam como "running"
e a aplicação fica "presa" ali e o executável permanece na memória.
Acontece tanto no debug do projeto, quanto na execução do executável fora do delphi.
Alguém tem a solução?
begin
Application.Initialize;
Application.CreateForm(Tdm, dm);
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.Run;
end.No debugador:
quando ele executa a linha do END, ele deveria encerrar toda a aplicação e limpar o executável da memória.
Acontece que as vezes ele encerra corretamente, mas as vezes algumas threats do próprio sistema ficam como "running"
e a aplicação fica "presa" ali e o executável permanece na memória.
Acontece tanto no debug do projeto, quanto na execução do executável fora do delphi.
Alguém tem a solução?
Alberto
Curtidas 0
Melhor post
Emerson Nascimento
12/04/2018
se você já estiver com alguma conexão com um banco de dados, dê um rollback nas transações abertas, feche todos os datasets e feche a conexão com o banco antes de fechar o form principal.
GOSTEI 1
Mais Respostas
Alberto
11/04/2018
Já tentei fazer isso, mas não resolveu, deve ser outra coisa.
GOSTEI 0
Emerson Nascimento
11/04/2018
tente:
begin
Application.Initialize;
Application.CreateForm(Tdm, dm);
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.Run;
Application.Terminate;
end.
begin
Application.Initialize;
Application.CreateForm(Tdm, dm);
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.Run;
Application.Terminate;
end.
GOSTEI 1
Emerson Nascimento
11/04/2018
precisa ver se pelo meio do código você não cria alguma classe que precisa ser destruída antes do Form, ou se tem algum Timer funcionando, ou alguma Thread em execução...
GOSTEI 0
Alberto
11/04/2018
Consegui encontrar o responsável pelo travamento:
Era o componente TFDEventAlerter do FireDac que ao fechar a conexão com o banco estava travando.
Não descobri o porque está acontecendo isso, sé é algum bug do delphi ou outra coisa.
Mas ao desabilitar ele o sistema está encerrando normalmente.
.
Agora preciso descobrir como fazê-lo funcionar a contento.
Era o componente TFDEventAlerter do FireDac que ao fechar a conexão com o banco estava travando.
Não descobri o porque está acontecendo isso, sé é algum bug do delphi ou outra coisa.
Mas ao desabilitar ele o sistema está encerrando normalmente.
.
Agora preciso descobrir como fazê-lo funcionar a contento.
GOSTEI 0