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 et callback


Sujet :

Boost C++

  1. #1
    Nouveau membre du Club
    boost::thread et callback
    Bonjour,

    J'ai une classe A contenant une fonction membre f() que je souhaiterais appeler dans un boost::thread, et une callback() (également fonction membre de A) que je souhaiterais passer en attribut à f(). Mon appel se fait depuis la classe A.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void A::callback()
    {
       std::cout << "test";
    }


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void A::f(std::function<void()> refCallback)
    {
       // fait des trucs
       refCallback();
    }


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    std::function<void()> f1 = boost::bind(&A::f, this);
    boost::thread t = boost::thread(boost::bind(&A::f, this), f1);


    Le compilateur me renvoit l'erreur suivante :
    boost/bind/mem_fn.hpp(342): error C2298: 'return'*: opération non conforme sur pointeur vers expression de fonction membre
    Savez-vous ce que j'ai mal fait dans mon code ?

    Merci beaucoup

  2. #2
    Nouveau membre du Club
    Dû à un problème avec le boost::bind() qu'il faut parfois mettre ou ne pas mettre.

  3. #3
    Membre expert
    Tu n'utilises pas A::callback. Par contre, il y a 2 fois A::f. Tu gagnerais à utiliser des lambdas et virer les intermédiaires:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    boost::thread t([this]{
      this->f();
      this->callback();
    });


    La stl dispose aussi d'un std::thread.

  4. #4
    Nouveau membre du Club
    Exact merci