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

Threads & Processus C++ Discussion :

std::thread et contrôle du thread créé


Sujet :

Threads & Processus C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Points : 6
    Points
    6
    Par défaut std::thread et contrôle du thread créé
    Bonjour,
    je rencontre quelques difficultés dans l'utilisation de std::thread..
    En fait je ne comprend pas comment garder le contrôle sur mon thread (sauf à faire un join() juste après sa création, mais dans ce cas à quoi bon faire un thread ?

    Je cherche à utiliser des std::thread dans mon appli Qt
    Si l'un de vous pouvez me donner un ptit code d'exemple
    par exemple j'ai un bouton start et un stop,
    quand je cliqu sur start le thread démarre et il incrémente un int passé en parametre chaque seconde. Quand on clique sur stop, le thread se termine (gracefully et me renvoi la valeur courante de l'entier en question..

    Merci, par ce que je galère un peu ca fait une dizaine d'année que j'avais pas touché de c++
    J'étais sur du java et l'utilisation des threads y est tres intuitive ^^

  2. #2
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Le std::thread actuel ne fournis rien pour la synchronisation.

    Le standard fournis d'autres outils pour ca. Par exemple tu peux utiliser std::async() (attention a bien utiliser le paramettre pour forcer la creation d'un thread) en combinaison avec std::future<>.

    Par contre boost::thread fournis de quoi interrompre un thread, comme dans ton exemple.

    Dans tous les cas, c'est a toi de mettre en place la facon dont les thread communiquent, std::thread n'a que le role de representer le thread.

    Tu peux utiliser des queues de messages (par exemple basee sur les conteneurs de TBB ou encore boost::lockfree), tu peux aussi passer par des mutex etc.

    Si tout ce que je viens de dire te perds, achete ce bouquin et lis le entierement: http://www.manning.com/williams/

    Si tu ne lis pas l'anglais... bon courage...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Points : 6
    Points
    6
    Par défaut merci
    Merci, pas de lézard, c'est clair.
    La classe std::thread n'est pas un wrapper autour d'un thread mais bien un objet thread "basique" (je sais j'y vais un peu fort). Je vais regarder ce qui est promesse et execution asynchrone, merci.
    Je voudrais éviter boost histoire de pas charger mille bibli en mem.
    pour l'instant j'interface en Qt, mais ca pourrait devenir du gtk voir du java...
    C'est pour ça que je préfère ne pas m'éloigner de la std et que je n'utilise pas QThread (qui serait le plus simple... ... tant que l'interface est en Qt!)
    Bref tu l'auras compris je veux garder portabilité ET flexibilité.

  4. #4
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par progPseud Voir le message
    La classe std::thread n'est pas un wrapper autour d'un thread mais bien un objet thread "basique" (je sais j'y vais un peu fort).
    Non, non, tu as exactement raison.

    Ils leur fallait cette brique pour pouvoir construire le future du concurrentiel du language.
    Ils n'ont pas integrer de systemes d'interruption comme dans boost.thread principalement parcequ'ils n'etaient pas d'accord sur les details du comportement et du coup faute de temps ils ont repousse le sujet.

    Et a priori ils vont plutot s'orienter sur fournir des outils de synchronisation generique, conteneurs thread-safe, queues par exemple, et amelioration du std::future plutot que d'avoir un systeme exclusivement poru arreter les threads.

    Je vais regarder ce qui est promesse et execution asynchrone, merci.
    Je voudrais éviter boost histoire de pas charger mille bibli en mem.
    pour l'instant j'interface en Qt, mais ca pourrait devenir du gtk voir du java...
    C'est pour ça que je préfère ne pas m'éloigner de la std et que je n'utilise pas QThread (qui serait le plus simple... ... tant que l'interface est en Qt!)
    Bref tu l'auras compris je veux garder portabilité ET flexibilité.
    Tu as bien raison!

    J'ai ce souci aussi et malheureusement tu risques de tomber sur des manques si tu n'utilises que std::thread. (sans compter les bugs de design de std::async() )

    Dans mon cas, parceque je n'ai pas besoin de GUI sur ce projet, je combine std, TBB (qui est partiellement certainement vouee a etre dans le prochain standard C++14) et boost pour completer (par exemple, pour fournir des mutex multiple-reader-single-writer qui n'existent pas dans std).

    Si il n'y a pas besoin d'un systeme de GUI comme Qt ou GTK, je te conseillerai juste d'ajouter TBB a std. Ca devrait etre carrement largement suffisant pour tous tes besoins.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Points : 6
    Points
    6
    Par défaut ok merci :)
    Merci pour tes réponses je vais regarder TBB je connais pas.

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

Discussions similaires

  1. Thread et contrôle WinForm
    Par AoSiX dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/02/2008, 16h19
  2. [Threads] Comment terminer un thread ?
    Par Wookai dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 16/04/2005, 13h25
  3. [Threads et interface] le thread bloque tout
    Par meda dans le forum Concurrence et multi-thread
    Réponses: 10
    Dernier message: 28/10/2004, 16h52
  4. [TOMCAT] [THREAD] Ajout d'un thread à Tomcat
    Par olivangel dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 12/08/2004, 11h55
  5. [Thread] comment arreter un thread qui execute une methode b
    Par Cyber@l dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 04/08/2004, 10h51

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