Comment gérer la tempo entre deux téléchargements ?

farco33 Messages postés 7 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 7 mars 2008 - 5 mars 2008 à 10:50
farco33 Messages postés 7 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 7 mars 2008 - 7 mars 2008 à 08:56
Salut à tous

Je réalise un petit gestionnaire de téléchargement, l'idée c'est de pouvoir récupérer plein d'url, et de les lister pour les télécharger (http), une par une
sauf que tout se fait en une fois et que mon prog télécharge ce qu'il peut, et quand il y arrive, c'est forcement le dernier de la liste

J'ai bien essayé de poser un Doevents pour attendre la fin du download avant d'attaquer le suivant, mais j'avoue, c'est moi qui l'ai pas mis comme il faut, et je vois pas trop comment ca marche en fait. J'ai essayé quelques boucles, bien lourdes et tout aussi inefficaces

voila juste la boucle :

For Index = 0 To List1.ListCount - 1
        List1.ListIndex = Index
        List2.ListIndex = Index
        DoEvents
 
        HTTPCopy.Download List1.ListIndex, List2.ListIndex, True
        DoEvents
Next Index

J'ai essayé avec DownLoadWebFile, ca télécharge bien mais ca me bloque l'appli pendant le tranfert (monotache 100%), donc moche et inexploitable
Ensuite j'ai trouvé HTTPCopy, un petit prog VB qui marche nickel (merci l'auteur), avec barre progression, infos.. sauf que j'"arrive pas à attendre la fin du download pour passer au suivant

Merci de vos suggestions

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
5 mars 2008 à 13:14
Salut
Je ne connais pas HTTPCopy mais regarde si cet objet à un évènement "Complete".
Dans ce cas, il te suffit d'attendre cet évènement dans une boucle Do-Loop à l'intérieur de laquelle tu mettras un DoEvents, histoire de ne pas bloquer le système.
Sinon, il va falloir que tu récupères la taille du fichiuer avant download et que tu le compares à la quantité de données reçues pour savoir que c'est terminé.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
farco33 Messages postés 7 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 7 mars 2008
5 mars 2008 à 14:05
Merci Jack pour ta réponse

J'ai cru effectivement voir un event Complete sur HTTPCopy, je vais voir ce que je peux en faire..le problème était principalement sur l'utilisation du DoEvents, déja être sur que je l'utilise correctement
Pour la taille, y a "peut être" plus rapide, étant donné qu'il y a une progressbar qui fonctionne, je peux peut etre tester si elle est arrivée à 100%, enfin, c'etait une idée, ca évitait des manip " si Taille fichier <> taille_DL", non ?

Pour info : HTTPCopy, c'est une appli VB 100% Winsock (http://www.vbfrance.com/code.aspx?ID=27293), ca tourne bien, c'est propre, mais ca gère une Url à la fois
Je fais mes essais, et je viendrais poser d'autres questions si je galère trop et mes réponses si je trouve

Merci
0
farco33 Messages postés 7 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 7 mars 2008
5 mars 2008 à 15:13
Bon effectivement y a bien un évènnement utilisable, retourné par l'ocx, celui qui dit que la connexion Winsock est terminée, HTTP_CLOSED

Voici le code qui fonctionne pour un téléchargement successif d'Url
For Index = 0 To List1.ListCount - 1
        List1.ListIndex = Index      'Url à Downloader

        List2.ListIndex = Index      'Répertoire Destination
       
        HTTPCopy.Download List1.ListIndex, List2.ListIndex, True

        Do
            DoEvents
        Loop Until LastStatus = HTTP_CLOSED

Next Index

Question Winsock :
Pour chaque download, ca donne :
Winsock Connect, Winsock Download, Winsock Close

Cela pose-t-il un probleme de faire comme ca, ou faudrait-il mieux que j'ai qu'un seul Connect et un seul Close ?
Problème d'abus de Winsock, de "propreté", je vais pas me faire jeter par le FAI si je fais 50 Winsock Connect à la suite ??
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 mars 2008 à 19:26
Salut
Non, l'enchaimenent Connect-Download-Close parait logique.
Oui, l'évènement Close est le bon indicateur.
Tu peux donc utiliser une boucle simple :
   Do While monWinsock.State <> sckClosed
      DoEvents
   Loop
avant de passer au suivant

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés





<hr />

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
farco33 Messages postés 7 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 7 mars 2008
7 mars 2008 à 08:56
Merci
0
Rejoignez-nous