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 :

Sous programmes independants dans le programme principal


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Sous programmes independants dans le programme principal
    Bonjour tout le monde,

    Je sais pas si mon intitulé est exact Mais ce serait pour un renseignement.

    J'ai quelques bases en C et pour un stage je dois concevoir un programme.

    Le probleme est que j'aimerais creer des sous programmes qui tournent independament les uns des autres, cad qu'il n'y ait pas une lecture lineaire dans mon programme principal.

    J'aimerais savoir en outre, si les pointeurs peuvent faire circuler des valeurs dans les memoires et les échanger entre les sous programmes.

    Je sais pas si je me suis bien fait comprendre alors je vais vous faire un petit exemple:

    Admettons que j'ai mon pogramme contenent 2 sous-programmes, l'un bouclant 10 fois et l'autre 20 fois. Si j'ai une lecture lineaire le programme va faire tourner le premier sous programme 10 fois puis l'autre 20 fois. Moi j'aimerais que les 2 tournent en meme temps, donc le premier finirait de boucler avant le second (en admettant qu'ils aient les memes durees d'applications).

    Merci bien de m'aider si vous le pouvez ^^

    PS, j'ai la bible du C/C++ chez moi si ca peut m'aider

  2. #2
    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
    Citation Envoyé par kekeboy
    Bonjour tout le monde,

    Je sais pas si mon intitulé est exact Mais ce serait pour un renseignement.

    J'ai quelques bases en C et pour un stage je dois concevoir un programme.
    Si tu programmes en C, ne serait-il pas plus judicieux de poster sur le forum C ?
    Citation Envoyé par kekeboy
    Le probleme est que j'aimerais creer des sous programmes qui tournent independament les uns des autres, cad qu'il n'y ait pas une lecture lineaire dans mon programme principal.
    Le terme sous-programme est rarement utilisé, en C comme en C++. On parlera plus facilement de fonction.

    Ce que tu cherches c'est ce qu'on nomme généralement du multi-thread (voire du multi-process). C'est un concept qui n'est pas défini en C++, aussi dois-tu te reposer sur des fonctions spécifiques à ton environnement de travail.
    Citation Envoyé par kekeboy
    J'aimerais savoir en outre, si les pointeurs peuvent faire circuler des valeurs dans les memoires et les échanger entre les sous programmes.
    En règle générale, quand on fait du multi-thread, la mémoire est partagée entre les différents threads d'exécution. Qu'il s'agisse de mémoire gérée par pointeurs ou non. Par contre, attention, celà implique que plusieurs threads peuvent accèder à la même mémoire en même temps, ce qui pose des problèmes de corruption. C'est une des raisons pour lesquelles programmer en multi-thread est significativement plus complexe que programmer en mono-thread.

    Citation Envoyé par kekeboy
    PS, j'ai la bible du C/C++ chez moi si ca peut m'aider
    Ca peut peut-être t'aider, si tu as une armoire bancale...
    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.

  3. #3
    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
    Sinon tu peux aussi utiliser les coroutines, ce qui est plus performant que les threads et ne pose pas de problèmes de synchronisation mémoire.
    Par contre c'est coopératif, pas préemptif.

    Ou alors tu peux ré-écrire ton programme de manière à ne pas avoir besoin de parallelisme.
    Boost ftw

  4. #4
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Ou alors tu peux ré-écrire ton programme de manière à ne pas avoir besoin de parallelisme.
    En effet car le multi thread a un coût à cause des changements de contexte au niveau du processeur.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Salut et merci pour vos commentaires.

    En fait les multi-processus semble la solution a mon pb, donc je dis un grand merci a tout le monde et peut a bientot.

    PS. je programme sur C++ ^^

  6. #6
    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
    Tu fais un concours de PS sans intérêt ?
    Boost ftw

  7. #7
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par kekeboy
    Salut et merci pour vos commentaires.

    En fait les multi-processus semble la solution a mon pb, donc je dis un grand merci a tout le monde et peut a bientot.

    PS. je programme sur C++ ^^
    Tout dépend de l'OS ; si c'est sous Unix il ya des biblios pour cela.
    Sous Windows utiliser des API comme CreateThread,_beginthread

  8. #8
    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
    Sauf que pour Windows tu donnes des solutions multi-thread et non pas multi-processus, et que non, _beginthread() n'est pas une solution. _beginthread() est un problème : _beginthreadex() est une solution.

    • Multithread pour Windows : CreateThread() ou _beginthreadex() (préférer la seconde).
    • Multithread sous Unixoïde : La bibliothèque C la plus courante, c'est pthread. En C++, je crois bien qu'il y a boost.thread.
    • Multiprocessus sous Windows : CreateProcess() ou ShellExecuteEx().
    • Multiprocessus sous Unixoïde : fork() [ +exec() ]
    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.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 46
    Points
    46
    Par défaut
    loufoque à dit :
    Sinon tu peux aussi utiliser les coroutines, ce qui est plus performant que les threads et ne pose pas de problèmes de synchronisation mémoire.
    Par contre c'est coopératif, pas préemptif.
    Dites-moi si je me trompe mais on parlait de thread classique en multi taches, mais la préemption concerne le temps réel. Si on n'utilise pas de thread temps réel les threads fonctionnent en round robin de façon naturel non ?.
    Au fait c'est quoi "coopératif" ?

    ---

    Un travail de groupe est un travail où chacun à son poste qui lui plaise ou non

  10. #10
    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
    Le "multitâche coopératif", à ce que j'ai compris (source Wikipédia FR), c'est le principe de Win 3.1 : Un seul thread, dans lequel tournent toutes les fenêtres. Les applications doivent rendre d'elle-même le processeur au système (généralement, au return de la WindowProc()).

    Le multitâche préemptif, depuis les mêmes sources passées par le même cerveau, c'est le contraire: C'est le kernel qui dit "Le processeur à tel thread, maintenant!". C'est le cas sous Windows depuis le début de Win32.

    Donc non, il semblerait que préemption et temps réel ne soient pas équivalents.
    De plus, il y a un autre terme de "préemption" employé dans "Inside Windows 2000", qui désigne le concept d'un thread de priorité supérieure se réveillant pour n'importe quelle raison et prenant d'office le processeur à un thread de priorité inférieure.
    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.

  11. #11
    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
    (source Wikipédia FR)
    Pour tout ce qui est informatique Wikipédia EN est bien plus intéressant et surtout plus complet.

    En tant que programmeur windows, tu as peut-être déjà entendu parler des "fibers" ?
    Boost ftw

  12. #12
    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
    Oui, elles sont apparues sous XP, et c'est un peu une nouvelle forme de multitâche coopératif.

    Mais franchement, je trouve cela inutile et pense que ça risque plus de compliquer le code qu'autre chose.
    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.

  13. #13
    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
    Mais franchement, je trouve cela inutile et pense que ça risque plus de compliquer le code qu'autre chose.
    Ça ne pose pas les problèmes de performance du multithreading ni les problèmes de synchronisation (deadlocks etc.)
    Boost ftw

  14. #14
    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
    Forcément, puisque tout s'exécute séquentiellement.

    Il faudrait sans doute que je me penche plus avant dessus, mais je trouve que ça complique plutôt que de simplifier par rapport à un code séquentiel normal.
    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.

Discussions similaires

  1. [AC-2007] Créer un sous-état lié dans un état principal
    Par Lincoln911 dans le forum IHM
    Réponses: 0
    Dernier message: 28/04/2010, 10h48
  2. Inclure un programme GPL dans son programme
    Par HerQuLe dans le forum Licences
    Réponses: 4
    Dernier message: 09/12/2009, 14h55
  3. Réponses: 3
    Dernier message: 17/09/2008, 14h02
  4. Réponses: 3
    Dernier message: 17/05/2007, 16h19
  5. Réponses: 3
    Dernier message: 14/06/2006, 11h04

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