Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   incomodidad con indy (https://www.clubdelphi.com/foros/showthread.php?t=70948)

Shadowng 20-11-2010 18:58:01

incomodidad con indy
 
Buenas! quería hacer una pregunta un poco repetitiva con respecto a indy, he estado viendo en el foro y en otras partes y siempre me encuentro con el detalle de que al usar el TidHTTP para descargar archivo la ventana se pega, para solucionar esto pongo esto:

Código Delphi [-]
procedure TForm1.IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
begin
  Application.ProcessMessages;
  Label1.Caption := IntToStr(AWorkCount);
end;

pero solo se refresca la ventana al recibir datos... del resto se pone lenta o se pega... me gustaría saber si hay alguna forma de usar indy o bajar archivos de internet sin que pase esto que se congela la ventana.

Un saludo!

manuc 20-11-2010 20:43:02

Hola Shadowng,

Si lo que quieres es que tu aplicación no se "congele" mientras descarga el fichero, tendrías que implementar el proceso de descarga en un hilo secundario.

De este modo, el hilo principal de tu aplicación quedaría libre y el secundario se encargaría de descargar el fichero.

Espero que te ayude.

Un saludo.

Shadowng 20-11-2010 21:00:04

gracias por la respuesta manuc, estaba pensando en algo así pero no se hacerlo en delphi xD ... estaba incluso pensando en usar cURL pero teniendo indy supongo que tener un .exe al lado de la app estaría de mas...

no estoy seguro como podría tener varios hilos en mi aplicación o.o por ahi lei algo de los thread (cuando trabaje en java era lo que me evitaba que se colgara la app en los bucles for y while) pero no entiendo como funcionan aqui

si tienes algún tutorial de los thread o thread e indy seria genial... (claro si es que se usa el thread para crear hilos independientes xD)

javier_ecf 20-11-2010 21:15:32

El manejo de hilos en delphi no es muy diferente de otros lenguajes como Java o c++, basta con que heredes una clase TThread y juegues con las propiedades de prioridad y ejecucion.

Otra opcion seria usar Timers, es una solucion mas rapida con procedimientos sencillos.


manuc 22-11-2010 11:55:22

Hola,

La verdad es que no tengo ningún manual y desconozco si habrá alguno en Internet, sobre cómo usar Delphi y TThreads.

Creo que si buscar Delphi y TThread en google, encontrarás varios artículos que te darán una idea muy clara de cómo programar un TThread con Delphi.

Lo de combinar TThreads e Indy, es cosa ya del ingenio. Yo te recomendaría, simplemente, que implementes un hilo secundario para la descarta y que dentro de este hilo crees un componente tidHTTP para realizar la descarga.

Espero haberte orientado un poco.

Un saludo.

Shadowng 23-11-2010 01:48:26

tranquilo manuc ya lo solucione! xD me costo un poco porque puse el Thread en otro .pas y eso no lo suelo hacer asi que fue algo un poco nuevo pero ya vi y anda perfecto el programa sobre todo con la sincronizacion entre el thread y la ventana :3


La franja horaria es GMT +2. Ahora son las 15:18:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi