verificar sem congelar o sistema.
Bom dia,
No evento onshow de um form, eu verifico se um determinado host, está conectado (componente idhttp).
Nessa verificação eu utilizo o ´try´ etc...
Mas tem um problema...
toda vez que eu abro este form, o programa fica ´congelado´ por alguns segundos.
Como faço para executar este procedimento em segundo plano ?
Evitando o congelamento de ´alguns segundos´ sem verificar se está ou não está conectado.
Obrigado
Obrigado
No evento onshow de um form, eu verifico se um determinado host, está conectado (componente idhttp).
Nessa verificação eu utilizo o ´try´ etc...
Mas tem um problema...
toda vez que eu abro este form, o programa fica ´congelado´ por alguns segundos.
Como faço para executar este procedimento em segundo plano ?
Evitando o congelamento de ´alguns segundos´ sem verificar se está ou não está conectado.
Obrigado
Obrigado
Unix
Curtidas 0
Respostas
Titanius
06/08/2007
Você pode usar Thread, assim ele verificaria em segundo-plano...
[]s
[]s
GOSTEI 0
Unix
06/08/2007
Complicado eu não encontro respostas no fórum, o pessoal só pergunta sobre este assunto.
Você tem algum exemplo sobre Thread ?
Eu preciso de algo simples...
Você tem algum exemplo sobre Thread ?
Eu preciso de algo simples...
try IdHTTP.Connect(); except updatefile.Free; end; if IdHTTP.Connected then begin codigo end;
GOSTEI 0
Unix
06/08/2007
Sem thread, existe outra solução ?
GOSTEI 0
Diegus
06/08/2007
Sem thread, existe outra solução ?
Application.ProcessMessages
Talvez ajude... não tenho certeza
GOSTEI 0
Massuda
06/08/2007
Sem thread, existe outra solução ?
Indy bloqueia/congela a execução até que a operação do socket se complete. A única alternativa seria usar um componente de HTTP que usasse eventos para indicar que a operação do socket completou, como, por exemplo, o [url=http://www.overbyte.be/]ICS[/url]. Claro, seu código existente precisará ser refeito para funcionar com o ICS.GOSTEI 0
Unix
06/08/2007
[quote:ae477a2c15=´unix´]Sem thread, existe outra solução ?
Application.ProcessMessages
Talvez ajude... não tenho certeza[/quote:ae477a2c15]
Em uma lista, um usuário postou isso:
só vc implementar uma conexao não sincronizada! e ficar dando app.processmessages!!
Mas eu não entendi como, e onde utilizar isso.
obrigado
GOSTEI 0
Massuda
06/08/2007
só vc implementar uma conexao não sincronizada! e ficar dando app.processmessages!!
O jeito mais fácil seria usar ICS ou os componentes padrão do Delphi para comunicação via socket. Não posso dar um exemplo do ICS pois nunca usei ele pra valer.
GOSTEI 0
Bruno Belchior
06/08/2007
Massuda, mesmo que o acesso esteja no escopo de uma outra Thread, o Indy congelaria o sistema?
GOSTEI 0
Massuda
06/08/2007
[quote:6eca963cc6=´Bruno Belchior´]mesmo que o acesso esteja no escopo de uma outra Thread, o Indy congelaria o sistema?[/quote:6eca963cc6]Não... ele congela apenas a thread onde a transferencia de dados está sendo feita. Claro, se seu programa pára esperando por essa thread, seu programa também congela.
GOSTEI 0
Felipeaj
06/08/2007
Se você colocar um Application.ProcessMessages no OnWorkProgress, ajuda um pouco (mas ainda não fica 100¬ ´estável´ o sistema)
Ajudou um pouco baixar o tamanho dos pacotes, ficou um pouco melhor
Espero te ajudado!
Felipe
Ajudou um pouco baixar o tamanho dos pacotes, ficou um pouco melhor
Espero te ajudado!
Felipe
GOSTEI 0
Eselvati
06/08/2007
Existe um componente idantifreeze do indy, talvez ele melhore o procedimento
Ederson Selvati.
Ederson Selvati.
GOSTEI 0