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

C++ Discussion :

Multi threading ?


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut Multi threading ?
    Bonjour,

    Je dois créer un programme permettant de téléchargement via 3 sources (torrent, ftp, http). Ces trois sources fonctionnent, mais l'une après l'autre.
    Hors, l'intérêt de mon programme est le fait qu'il puisse télécharger sur les 3 modes en même temps.

    J'ai pensé que les threads pourraient être utiles dans ce cas, mais je ne trouve pas de tutorial pemettant de créer simplement des processus, et de les détruire dès le téléchargement terminer.

    Qui sait comment utiliser des phreads ???

    NB : programmant sous windows, impossible d'utiliser fork()

  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Regarde boost.thread : http://www.boost.org/doc/html/threads.html

    Miles a écrit une introduction aux threads de boost : http://miles.developpez.com/tutoriels/cpp/boost/thread/

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 46
    Points
    46
    Par défaut
    Si tu es sous Windows regade sur : http://msdn2.microsoft.com/fr-fr/lib...e8(VS.80).aspx

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Citation Envoyé par Alp
    Regarde boost.thread : http://www.boost.org/doc/html/threads.html

    Miles a écrit une introduction aux threads de boost : http://miles.developpez.com/tutoriels/cpp/boost/thread/
    Mon projet inclut déjà boost, donc ca serait cool que j'arrive à utiliser ces phreads.
    Merci beaucoup, je vais regarder son tuto.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    C'est thread, pas phread

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Maintenant je connais un peu mieux ce que je veux faire, donc vous avez peut-être me dire si je me trompe en voulant utiliser des threads.

    Ce qu'il me faut, c'est qu'un processus père(téléchargement torrent) lance 2 processus fils (http, ftp), et qu'il récupère la valeur générée par ses 2 fils (une partie d'un fichier en fait le plus souvent).
    Donc voila, sous Linux, j'aurais utiliser fork, voir p_pid (il me semble, c'est vieux), mais sous Windows, je ne connais pas le principe.

    Existe-t'il de simples processus sur Windows.

    NB : dans le cas concret, par exemple, 3 torrent seront lancé, 2 http, et 1 ftp, et le tout, en même temps sur des fichiers qui pourront êtres différents.

  7. #7
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 46
    Points
    46
    Par défaut
    Moi je passerais par la méthode CreateThread avec une méthode en paramètre.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Citation Envoyé par Darwiz
    Moi je passerais par la méthode CreateThread avec une méthode en paramètre.

    C'est ce que je suis en train de regarder, cela à l'air de correspondre plutôt parfaitement à ce que je souhaite faire.
    Donc, je vais plancher sur la question, et je vous dirais quoi.

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    CreateThread est une fonction de l'API Win32.
    boost.thread est une bibliothèque portable, et aussi plus propre car plus conçu pour le C++.
    Boost ftw

  10. #10
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    et aussi plus propre car plus conçu pour le C++.
    C'est plus conçu pour le C++.
    CreateThread, c'est du C.
    En premier lieu, utilisez un moteur de recherche.
    En second lieu, postez sur le forum adéquat !

  11. #11
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Tu veux dire que en C on utilise CreateThread, et en C++ on utilise boost ou une autre encapsulation ?
    Je ne suis pas vraiment d'accord avec cela. Une grande partie du C est aussi du C++.

  12. #12
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    En C++, on utilise généralement des encapsulation, qui permettent entre autre de définir plus librement la fonction de thread, pour qu'elle puisse être par exemple une fonction membre d'un objet.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  13. #13
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Est-ce que quelqu'un aurait un exemple concret où le fils renvoie une valeur au père qui traite cette valeur. Je sais que c'est possible sous Linux (déjà utilisé), mais sous Windows...

  14. #14
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    L'utilisation de fork() (non portable) implique la création de plusieurs processus ; cette mécanique n'a rien à voir avec la notion de threads.

    L'utilisation de boost.thread (portable sous Windows et Linux) met en oeuvre qu'un seul processus dans lequel il y a création de plusieurs activités (threads).

    Dans ton cas tu devrait t'orienter vers boost.thread.

    Enfin, lorsque l'on à plusieurs thread, comme chaque activité est situé dans un même processus, toute la mémoire est partagée, donc aucun soucis de tansfert de données entre threads. Une simple variable globale suffit.
    Avant de poster un message .
    Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .

  15. #15
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Citation Envoyé par mchk0123
    L'utilisation de fork() (non portable) implique la création de plusieurs processus ; cette mécanique n'a rien à voir avec la notion de threads.

    L'utilisation de boost.thread (portable sous Windows et Linux) met en oeuvre qu'un seul processus dans lequel il y a création de plusieurs activités (threads).

    Dans ton cas tu devrait t'orienter vers boost.thread.

    Enfin, lorsque l'on à plusieurs thread, comme chaque activité est situé dans un même processus, toute la mémoire est partagée, donc aucun soucis de tansfert de données entre threads. Une simple variable globale suffit.
    Merci,
    Je n'arrive pas à trouver d'exemple "simple", en aurais-tu un ?
    Mais donc en faire, je déclare une variable en globale, je positionne un ponteur vers l'endroit souhaité via SetFilePointer, et le processus meurt, ainsi de suite, et à la fin, je récupère le fichier ?
    Mais est-ce que cette méthode ne risque pas de poser des problèmes si plusieurs phreads mettent des données en même temps dans un fichier ?

  16. #16
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    D'où l'utilité des mutex
    Boost.Thread offre tout ce qu'il faut pour gérer tout cela, et pas qu'un peu.

    Regarde la doc de Boost.Thread, ainsi que le tutoriel de miles à ce sujet => liens que j'ai posté bien plus haut.

  17. #17
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    J'ai remarqué que sur son tuto, il disait que boost allait beaucoup changer, donc comme mon prog va être utilisé pendant longtmps (j'espère), je voudrais éviter tout problème.

  18. #18
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    L'utilisation comme client (est moins "risqué" à long terme qu'une utilisation avec héritage.
    En effet, si l'interface ne change pas, ton programme durera longtemps...

  19. #19
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Citation Envoyé par poukill
    L'utilisation comme client (est moins "risqué" à long terme qu'une utilisation avec héritage.
    En effet, si l'interface ne change pas, ton programme durera longtemps...
    Je ne comprend pas ce que tu veux dire ?

  20. #20
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Ben, quand tu es client (aggrégation de la bibliothèque que tu utilises dans une des tes classes), tu utilises l'interface de la bibliothèque en question pour t'en servir. Si la bibliothèque change un peu, t'as plus de chance de t'en sortir!
    Alors qu'en cas d'héritage, tu redéfinis... et là c'est pas pareil.

    client -> héritage d'interface
    héritage -> héritage d'implémentation

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. Réponses: 2
    Dernier message: 15/05/2004, 18h33
  3. Réponses: 16
    Dernier message: 30/01/2004, 11h05
  4. [VB6][active x] faire du multi-thread avec vb
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/05/2003, 12h01
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09

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