IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Methode de gestion de téléchargements en utilisant Wget via un CreateProcess


Sujet :

Windows

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut Methode de gestion de téléchargements en utilisant Wget via un CreateProcess
    Bonsoir,

    Je suis en train de créer un petit gestionnaire de téléchargement en C qui se charge d'executer l'application Wget en lui "balançant" une ligne de commande via une API Windows.
    J'ai un problème et je patauge un peu car je ne sais pas comment le résoudre.

    J'ai une liste plus ou moins grande de fichiers à télécharger et j'aimerais que mon programme puisse télécharger 'X' fichiers simultanément (par exemple 2 ou 3) jusqu'à ce que la liste complète soit téléchargée. Je ne sais pas trop si je me fais bien comprendre ?

    Bref, le problème, c'est que je n'arrive pas à trouver le moyen de bien gérer ces téléchargements, c'est-à-dire de savoir si un fichier est bien fini de télécharger afin de permettre le téléchargement du fichier suivant dans ma liste d'URLs.

    J'avais pensé à créer un système multithreads avec un tableau indiquant l'état de chacun (actif , terminé). Pour le remplir, j'ai besoin de récupérer les informations relatives à Wget pour savoir si tel ou tel fichier est bien fini de télécharger. Et là, je nage totalement...
    Je sais que CreateProcess remplit une structure d'informations diverses sur le nouveau processus, mais je n'arrive pas à l'exploiter proprement. Mais d'après ce que j'ai compris aussi, si on lance plusieurs fois un même processus, c'est le même qui tourne en utilisant différentes adresses virtuelles ?

    Bref, comment puis-je faire ? Existe-t-il d'autres solutions plus propres et/ou plus efficaces ?
    Merci !

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    La seule chose que tu peux vraiment savoir sur un processus qui n'est pas programmé spécifiquement pour qu'on puisse communiquer avec, c'est quand il se termine (avec wait() sous unixoïde, WaitForSingleObject() et ses soeurs comme WaitForMultipleObjects() sous Win32).

    Si tu crées X processus, chacun aura son propre id, son propre thread principal (qui aura lui-même son propre ID) et la structure PROCESS_INFORMATION contient en plus un HANDLE vers chacun. Tu peux utiliser le handle du processus pour attendre qu'il se termine (ou attendre qu'un se termine, réagir et recommencer à attendre).

    Note: Pense à fermer chaque HANDLE dont tu n'aies plus besoin avec CloseHandle() : Notamment, le handle du thread principal, et le handle du processus une fois celui-ci terminé...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par jeroman
    Je suis en train de créer un petit gestionnaire de téléchargement en C qui se charge d'executer l'application Wget en lui "balançant" une ligne de commande via une API Windows.
    Sans vouloir remettre en cause ton projet, tu pourrais aussi utiliser une bibliothèque comme libcurl plutôt que de faire appel à un programme en ligne de commande.

    Sinon, comme te l'a dit Médinoc, tu peux attendre que chaque processus se termine.
    Si le programme lancé affiche des choses, tu peux, avant son lancement, créer un tube (CreatePipe()) pour récupérer ce qu'il écrit et l'interpréter (pour avoir plus d'infos que "fini"/"pas fini") mais cela peut devenir complexe si la sortie n'est pas formatée d'une façon facilement "parsable" (ou, en tous cas, trop complexe en regard du bénéfice obtenu).
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 360
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 360
    Points : 20 377
    Points
    20 377
    Par défaut
    Citation Envoyé par jeroman
    Bonsoir,

    J'ai une liste plus ou moins grande de fichiers à télécharger et j'aimerais que mon programme puisse télécharger 'X' fichiers simultanément (par exemple 2 ou 3) jusqu'à ce que la liste complète soit téléchargée. Je ne sais pas trop si je me fais bien comprendre ?
    oui on a compris tu veux faire un "download accelerator"
    Il faut effectivement créer à chaque fois un processus ou thread.
    J'utiliserais par exemple std::vector pour empiler tous les processus crées
    Citation Envoyé par jeroman
    Bonsoir,

    Je suis en train de créer un petit gestionnaire de téléchargement en C qui se charge d'executer l'application Wget en lui "balançant" une ligne de commande via une API Windows.
    Mais non ! Faut prendre WinInet il ya des fonctions FTP et HTTP pour cela
    MSDN+WinInet
    http://msdn2.microsoft.com/en-us/library/aa385331.aspx

    http://www.codeproject.com/internet/...httpclient.asp
    http://www.codeproject.com/internet/ftpwanderer.asp

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par jeroman
    [...] en C [...]
    Citation Envoyé par Mat.M
    J'utiliserais par exemple std::vector
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Bonjour ,

    Merci pour vos réponses.

    Je suis finalement parvenu à résoudre le problème grâce à l'API
    WaitForSingleObject() dans mon thread de téléchargements. J'ai testé et ça marche nickel.

    Bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/07/2008, 12h45
  2. [FTP] Gestion de téléchargements
    Par soshin dans le forum Langage
    Réponses: 11
    Dernier message: 04/10/2007, 11h00
  3. Methode de gestion d'évenement + affichage
    Par Aarbaal dans le forum SDL
    Réponses: 4
    Dernier message: 19/02/2007, 22h52
  4. Gestion des téléchargements avec javascript ?
    Par TheRedLed dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/09/2006, 19h27
  5. Gestion de téléchargement sécurisé...
    Par falcorth dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 18/12/2005, 23h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo