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 :

Comment on fait des threads?


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut Comment on fait des threads?
    Salut!

    J'ai une fonction qui requiert un temps de traitement important! et j'aimerais la mettre dans un thread, pour evite que le programme soit bloque par ce traitement (interface graphique atteignable,etc,...).

    Donc ma question est comment faire un thread en C++??

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Il y a plusieurs bibliothèques qui le permettent.
    Par exemple Boost : http://miles.developpez.com/tutoriels/cpp/boost/thread/

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut
    Donc en gros, pour mon cas. C'est-a-dire: une fonction qui s'execute dans un thread on aura :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //Dans Main
    #include <boost/thread/thread.hpp>
     
    void uneFonction(){;}
     
    int main(){
     
    boost::thread unThread(&uneFonction);
     
    }
    Donc quand j'appelle uneFonction(), le thread se lance??? comment on le tue? c'est automatique??

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Le thread s'arrête lorsque la fonction se termine, mais l'objet thread peut être détruit sans que le thread lui-même s'arrête.
    Pour synchroniser, il y a barrier.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut
    et sans la librairie boost, c'est quoi les possiblités???

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    pourquoi, elle te plait pas la librairie Boost ???

    plus serieusement, elle est tres simple a utiliser et tres "prudente" dans la gestion des ressources, donc evite pas mal d'erreur. je m'en suis servi recemment et ca ronronne san probleme, alors que j n'y connaissais pas grand chose aux threads.. donc je recommande !!

    sinon, tu as des solutions mais tres specifiques a ton systeme, et plus "bas niveau", ce qui mltiplie les risques d'erreur..

  7. #7
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Qu'est-ce que tu utilises comme bibliothèque pour l'interface graphique ?
    En général (du moins les quelques bibliothèques que je connais ) il y a un système de gestion de threads avec...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut
    merci pour vos reponses!

    Alors pour être franc, je n'ai pas encore developper l'interface graphique, mais je pensais le faire avec visual c++ express, donc pour les GUI c'est du .net!
    Ok pour la libraire boost mais comment je l'installe c'est pas trop le bronx????
    Et quelles sont les solutions que je pourrais dja utiliser???
    Selon je devrais pas m'interreesser au thread avant de developper le GUI???
    je sais ca fait pas mal de questions en meme temps ^_^

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Attention: Si tu fais du .Net, je crois bien que tout ce qui touche au système devra être en .Net : Donc, les threads aussi...

    Avec VS Express, en téléchargant le Platform SDK, tu pourras aussi utiliser l'API Win32...

  10. #10
    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 je pensais le faire avec visual c++ express, donc pour les GUI c'est du .net!
    Rien ne t'oblige à utiliser .NET.

    En tous cas si tu utilises .NET, tu ne fais plus du C++.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut
    Je sais cela, mais avec les contraites temporel que j'ai il est infiniment plus simple pour moi de créer le GUI avec l'éditeur de VC++ express, (la version gratuite n'offrant que la plateforme .net pour l'édition graphique)...
    Sinon concernant ces threads, qu'est ce qu'il me reste à part la boost??
    des faq ou tuto qui en parle sont les bienvenue...

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Mouais, on ne peut rien faire à la souris, contrairement aux autres versions. Et la version Express ne donne accès qu'à l'API WIN32, rien d'autre.
    Pour les threads, il te reste le sthreads de Windows, ACE, Qt, ...

  13. #13
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    oui, j'ai encore du mal a m'habituer au fait qu'il y ai des gens qui programment en incluant une interface graphique

    donc a priori, va falloir utiliser les trucs de la maison microsoft, auquel je ne connais rien, donc ma modeste contribution s'arrete la.

    soit dit en passant, l me semble que boost est lourd a installer sous windows.

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Pas plus que sous Linux quand ce n'est pas pré-installé.

  15. #15
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    attention, ceci n'est pas un troll, juste un cas particulier ...

    sous windows, il me semble qu'il y a ue manip bizzare a faire avec un utilitaire fourni par boost, un truc assez special, avec tout un tas de parametere a donner en ligne de commande..

    sous linux j'ouvre synaptic, je coche la case "boost-thread", il la telecharge et il l'installe tout seul, comme pour tous les autres logiciels/librairies que j'utilise ou presque.

  16. #16
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Pour la compilation de Boost, on utilise bjam, oui. Ce que tu télécharges, c'est une version compilée pour un compilateur dans un cas de figure. Parfois tu dois changer de compilateur, prendre un autre que GCC, et là, t'es mal barré.
    Sous Windows, on utilise couremment MingW, VS, ... ils ne peuvent pas fournir un paquet pour chaque compilateur

  17. #17
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    certes, comme je le disais, mon propos n'avait pas une portée générale. dans mon cas personnel, l'installation sous windows a été douloureuse, et celle sus ubuntu enfantine. mais il est vrai que je n'avais pas de contraintes de ce type. reste que l'usage de la ligne de commande sous windows n'est pas tres agreable, donc quitte recompiler, je prefere quand meme le faire sous nunux mais ne nous eloignons pas du sujet !

  18. #18
    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
    Y'a des versions précompilées de boost pour MSVC7.1 et 8.
    http://prdownloads.sourceforge.net/boost/

  19. #19
    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 861
    Points
    11 861
    Par défaut
    Et tu les télécharges précompilées?
    Parce que l'utilitaire en ligne de commande sert juste à compiler les librairies qui ont besoin de l'être
    Sinon pour les threads il y a pthread(C), wxWidgets, QT, ACE, boost et d'autres beaucoup moins connues.
    Mais il faudrait le faire pour ne pas trouver ton bonheur parmi celles là.

  20. #20
    Membre actif Avatar de scaleo
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 327
    Points : 219
    Points
    219
    Par défaut
    Tu est sur que ta pas téléchargé visusla C# Expresse ???? parce qu'il me semble que VC++ EX, bah l'interface c'est du pur C++ aucune trace de .Net sauf si tu veut faire du C++/.Net , mais même dans ce ac tu peut utiliser OpenMP qui te permet de multithreader une application très simplement et qui est pris en charge par Visual Studio et est multiplateforme

Discussions similaires

  1. Comment stopper un thread qui fait des appels natifs ?
    Par khayyam90 dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 04/01/2013, 10h30
  2. Comment BIEN gérer des threads?
    Par klakman dans le forum Threads & Processus
    Réponses: 9
    Dernier message: 24/12/2010, 18h34
  3. Réponses: 14
    Dernier message: 04/06/2007, 22h43
  4. Réponses: 4
    Dernier message: 28/03/2005, 19h42

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