GARANTIR DESCONTO

Fórum verificar sem congelar o sistema. #344102

06/08/2007

0

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


Unix

Unix

Responder

Posts

06/08/2007

Titanius

Você pode usar Thread, assim ele verificaria em segundo-plano...

[]s


Responder

Gostei + 0

06/08/2007

Unix

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...

  try
    IdHTTP.Connect();
  except
    updatefile.Free;
  end;

  if IdHTTP.Connected then
  begin
 codigo
end;



Responder

Gostei + 0

06/08/2007

Unix

Sem thread, existe outra solução ?


Responder

Gostei + 0

06/08/2007

Diegus

Sem thread, existe outra solução ?


Application.ProcessMessages

Talvez ajude... não tenho certeza


Responder

Gostei + 0

06/08/2007

Massuda

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.


Responder

Gostei + 0

07/08/2007

Unix

[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


Responder

Gostei + 0

07/08/2007

Massuda

só vc implementar uma conexao não sincronizada! 
e ficar dando app.processmessages!!
Mas eu não entendi como, e onde utilizar isso.
É basicamente o que escrevi no meu primeiro post neste tópico... Indy usa conexão síncrona/sincronizada por isso bloqueia/congela o seu programa. Se você usar comunicação via socket assincrona/não-sincronizada seu programa não congela.

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.


Responder

Gostei + 0

07/08/2007

Bruno Belchior

Massuda, mesmo que o acesso esteja no escopo de uma outra Thread, o Indy congelaria o sistema?


Responder

Gostei + 0

07/08/2007

Massuda

[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.


Responder

Gostei + 0

10/08/2007

Felipeaj

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


Responder

Gostei + 0

11/08/2007

Eselvati

Existe um componente idantifreeze do indy, talvez ele melhore o procedimento







Ederson Selvati.


Responder

Gostei + 0

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

Aceitar