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 et les threads


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Par défaut Boost et les threads
    Bonjours je suis pas sur qu'il faut metre mon poste ici mais bon ....

    Donc j'ai crée une class et je voudrai crée un threads qui lancerais une methode de cette class, le problem c'est que je reçoi un message d'erreur quand je le fait


    /home/rodolphe/Bureau/Hockey subaquatique/Hockey Subaquatique/windows.cpp||In member function ‘void Window::audio_ecran()’
    /home/rodolphe/Bureau/Hockey subaquatique/Hockey Subaquatique/windows.cpp|69|erreur: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say ‘&Window::audio_ecran’|
    /usr/include/boost/function/function_template.hpp||In member function ‘void boost::function0<R, Allocator>::assign_to(const Functor&) [with Functor = void (Window::*)(), R = void, Allocator = std::allocator<boost::function_base>]’
    /usr/include/boost/function/function_template.hpp|624|instantiated from ‘boost::function0<R, Allocator>::function0(Functor, typename boost::enable_if_c<boost::type_traits::ice_not::value, int>::type) [with Functor = void (Window::*)(), R = void, Allocator = std::allocator<boost::function_base>]’|
    /home/rodolphe/Bureau/Hockey subaquatique/Hockey Subaquatique/windows.cpp|69|instantiated from here|
    /usr/include/boost/function/function_template.hpp|781|erreur: no class template named ‘apply’ in ‘struct boost::detail::function::get_invoker0<boost::detail::function::member_ptr_tag>’|
    /usr/include/boost/function/function_template.hpp||In member function ‘bool boost::detail::function::basic_vtable0<R, Allocator>::assign_to(const F&, boost::detail::function::function_buffer&) const [with F = void (Window::*)(), R = void, Allocator = std::allocator<boost::function_base>]’
    /usr/include/boost/function/function_template.hpp|789|instantiated from ‘void boost::function0<R, Allocator>::assign_to(const Functor&) [with Functor = void (Window::*)(), R = void, Allocator = std::allocator<boost::function_base>]’|
    /usr/include/boost/function/function_template.hpp|624|instantiated from ‘boost::function0<R, Allocator>::function0(Functor, typename boost::enable_if_c<boost::type_traits::ice_not::value, int>::type) [with Functor = void (Window::*)(), R = void, Allocator = std::allocator<boost::function_base>]’|
    /home/rodolphe/Bureau/Hockey subaquatique/Hockey Subaquatique/windows.cpp|69|instantiated from here|
    /usr/include/boost/function/function_template.hpp|437|erreur: no matching function for call to ‘boost::detail::function::basic_vtable0<void, std::allocator<boost::function_base> >::assign_to(void (Window::* const&)(), boost::detail::function::function_buffer&, boost::detail::function::basic_vtable0<R, Allocator>::assign_to(const F&, boost::detail::function::function_buffer&) const [with F = void (Window::*)(), R = void, Allocator = std::allocator<boost::function_base>]::tag) const’|
    ||=== Build finished: 10 errors, 0 warnings ===|


    avec cette appel :
    boost::thread unThread(&musique_panneau_demarrage.audio_play);



    j'ai entendu dire qu'il fallait une étape intermédiaire pour faire des threads avec des methode mais la quel ???

  2. #2
    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
    Par défaut
    Le constructeur de boost::thread prend un foncteur avec une signature void ().
    Toi, tu lui passes une expression interdite par le C++, ce qui provoque cette erreur. Il suffit de lire l'erreur, elle donne un début de solution.

    Citation Envoyé par Traduction du message d'erreur
    Le C++ ISO interdit de prendre l'adresse d'une fonction membre non-statique non qualifiée ou non parenthésée pour former un pointeur vers une fonction membre. Utilisez &Window::audio_ecran.
    Mais ce n'est pas suffisamment, il faut également disposer d'un objet pour pouvoir appeler cette fonction membre.
    Il faut donc binder l'objet à la fonction membre, ce qui se fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::thread unThread(boost::bind(&Window::audio_play, &musique_panneau_demarrage));

Discussions similaires

  1. boost, la serialization et les threads (encore)
    Par nemodev dans le forum Boost
    Réponses: 5
    Dernier message: 12/03/2010, 15h29
  2. [BOOST] Problème avec les threads
    Par SOAD08 dans le forum Dev-C++
    Réponses: 7
    Dernier message: 08/10/2006, 10h23
  3. Boost et les Threads
    Par TuRn3r dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 10/05/2006, 10h50
  4. Question simple sur les threads :)
    Par momox dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/06/2003, 04h13
  5. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59

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