Téléchargement de plusieurs fichiers avec IdHTTP

JeremyLecouvert Messages postés 139 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 10 mai 2010 - 8 août 2008 à 17:51
JeremyLecouvert Messages postés 139 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 10 mai 2010 - 11 août 2008 à 11:46
Salut!

Je suis actuelle ment sur une appli qui permet de downloader des fichiers. J'utilise un TIdHTTP, ça donne à peu près ça (j'élague la construction de la String!):

function TForm1.GetFichier(const URL, FileName : string): Boolean;
var
  idHttp: TIdHTTP;
  Stream: TFileStream;
begin
  Stream := TFileStream.Create(FileName, fmCreate or fmShareExclusive);
  try
    idHttp := TIdHTTP.Create(nil);
    try
      idHttp.Get(URL, Stream);
    finally
      idHttp.Free;
    end;
    Result := True;
  finally
    Stream.Free;
  end;
end;

...jusque là rien d'extraordinaire! Le souci c'est que je voudrais lancer plusieurs téléchargements simultanés.
J'appelle ma fonction dans une boucle. Je pensais jouer sur les évènements IdHTTPWorkBegin, ou qq chose dans le genre, mais ça changera rien puisque je ne sors de ma fonction qu'une fois le download terminé.

Quelqu'un aurait-il une solution (si possible en évitant le multithread)?

Merci d'avance.

2 réponses

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 2
8 août 2008 à 20:54
Salut !

"évitant le multithread"
=> impossible, du moins avec Indy, ces composants étant "bloquants".
Il te faudra donc créer un thread par fichier à télécharger.

Attention à la mise à jour de l'affichage, tout doit être fait dans les règles de l'art, sinon, malgré le fait que ça compilera, tu le ressentira au niveau des performances et ça risque même de planter.

Voila.
A+
Flo

PS: je vois que tu as bien pensé à utiliser les blocs try...finally mais pour le moment ton Result ne sert à rien puisque True est renvoyé même si idHttp.Get(...) plante.

Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.nethttp://te%3C/body
0
JeremyLecouvert Messages postés 139 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 10 mai 2010 2
11 août 2008 à 11:46
'lut!

"...mais pour le moment ton Result ne sert à rien" => je sais, je l'ai mis là en vue d'une prochaine modif..

Donc Flo, si j'ai bien compris ("du moins avec Indy"), il y a un moyen de le faire avec d'autres composants? Tu penses peut-être au TWebBrowser?  J'ai déjà essayé sur une autre appli (qui ne faisait pas de downloads), et j'ai eu des résultats assez bizarres dans le traitement en boucle de formulaires. Je remplissais mes champs une fois la page chargée; en debug pas de pb, mais en fonctionnement normal la page n'atteignait jamais l'état READYSTATE_COMPLETE... j'ai peut-être loupé qq chose sur le fonctionnement du composant!

En tout cas, si tu as des tuyaux en ce qui concerne mes pb de downloads, je suis preneur.

Re-merci.
@+

PS: "Attention à la mise à jour de l'affichage" => je suppose que tu parles des Application.ProcessMessages à mettre dans le prog pour ne pas figer l'affichage?
0