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

Boost C++ Discussion :

[boost::thread] créer un thread sur une fonction membre.


Sujet :

Boost C++

  1. #1
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut [boost::thread] créer un thread sur une fonction membre.
    Bonjour.


    je souhaiterais créer un thread tournant sur une fonction membre d'une classe...
    or la création avec boost::thread selon le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::thread thethread(wheels_thread_func);
    avec wheels_thread_func une fonction void avec void arguments,me renvoie l'erreur suivante à la compilation:
    erreur: no matching function for call to ‘boost::thread::thread(<unresolved overloaded function type>)’
    /usr/local/include/boost-1_38/boost/thread/detail/thread.hpp:199: note: candidats sont: boost::thread::thread(boost::detail::thread_move_t<boost::thread>)
    /usr/local/include/boost-1_38/boost/thread/detail/thread.hpp:185: note: boost::thread::thread(F, typename boost::disable_if<boost::is_convertible<T&, boost::detail::thread_move_t<T> >, boost::thread::dummy*>::type) [with F = void (wheels::*)()]
    /usr/local/include/boost-1_38/boost/thread/detail/thread.hpp:147: note: boost::thread::thread()
    /usr/local/include/boost-1_38/boost/thread/detail/thread.hpp:118: note: boost::thread::thread(boost::detail::thread_data_ptr)
    /usr/local/include/boost-1_38/boost/thread/detail/thread.hpp:108: note: boost::thread::thread(boost::thread&)
    Je me demandais si c'était par-ce qu'il n'est théoriquement pas possible de créer un thread sur une fonction membre (je serais quitte pour une fonction globale et friend, mais je préfererais de loin pouvoir le faire sur une fonction membre) ou si je m'y suis simplement mal pris...

    merci

  2. #2
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Mal pris.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include "boost/thread.hpp"
     
    class Parameter
    {
    };
     
    class Data
    {
    public:
       void DoStuff(const Parameter& param, int otherParam){}	
    };
     
    class A
    {
    public:
       void SomeFunc(const Parameter& param, int otherParam) 
       {
          data_.DoStuff(param, otherParam);
       }
    private:
       Data data_;
    };
     
    int main()
    {
       A a;
       Parameter param;
       boost::thread my_thread(&A::SomeFunc, &a, boost::cref(param), 5);
       my_thread.join(); 
       return 0;
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 40
    Par défaut
    Ce n'est pas plutôt comme ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    boost::thread my_thread(boost::bind(&A::SomeFunc, &a, boost::cref(param), 5));
    En tout cas ça fonctionne chez moi.

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Arzar a oublié le bind, mais c'est bien ce qu'il voulait dire...

  5. #5
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Non, je n'ai pas oublié le bind.
    boost::thread possède aussi ce constructeur :
    Thread Constructor with arguments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template <class F,class A1,class A2,...>
    thread(F f,A1 a1,A2 a2,...);
    Preconditions:
    F and each An must by copyable or movable.

    Effects:
    As if thread(boost::bind(f,a1,a2,...)). Consequently, f and each an are copied into internal storage for access by the new thread.
    Edit : Il va falloir s'habituer à ce genre de syntaxe, car avec le perfect forwarding du C++0x, on va en voir de plus en plus.

  6. #6
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    chez moi, les deux marchent avec et sans bind....


    enfin merci à tous, ça résout mon problème.


    merci encore

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Au temps pour moi... je ne suis pas encore familier avec C++0x !

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

Discussions similaires

  1. Pointeur sur une fonction membre templatée et +
    Par metagoto dans le forum Langage
    Réponses: 2
    Dernier message: 09/08/2013, 02h05
  2. Ptr sur une fonction membre.
    Par willycat dans le forum C++
    Réponses: 3
    Dernier message: 14/04/2008, 15h29
  3. Réponses: 5
    Dernier message: 29/06/2006, 17h23
  4. CreateThread sur une fonction membre (méthode)
    Par Kypper_667 dans le forum C++
    Réponses: 5
    Dernier message: 26/06/2006, 09h19
  5. Réponses: 3
    Dernier message: 16/05/2006, 18h22

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