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

SL & STL C++ Discussion :

pthread_create et fonction membre de classe


Sujet :

SL & STL C++

  1. #1
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut pthread_create et fonction membre de classe
    Bonjour,

    Je voudrais savoir s'il est possible de passer comme fonction à pthread_create un fonction membre de classe ? j'ai essayé avec la stl et avec boost, mais je ne sais si je m'y prend correctement.. une solution ?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Une solution est donnée dans la FAQ C++ (avec les threads Windows). Recherche un truc du genre "Pourquoi ne peut-on pas passer une fonction membre là où un pointeur de fonction est attendu ?".

  3. #3
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    Merci pour la réponse, mais en fait dans la faq il est juste indiqué pourquoi c'est un problème, pas comment le résoudre. (si, c'est indiqué de déclarer la fonction en statique... ou de changer le prototype de la fonction appelante : pas possible)

    en fait je cherche une solution du genre de celle qui est implémentée dans la libsigc++ ou tu peut faire un sigc_fun() à partir du nom de la classe, du membre, et d'un objet. j'imagine que la meme chose doit exister ailleurs ? (stl::mem_fun ? boost::function ?)

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pas de solution dans la FAQ ? Et le code qui est donné c'est quoi ?

    De toute façon c'est une fonction C, qui attend un pointeur sur fonction libre et pas autre chose. Alors si tu trouves un mécanisme qui permet de passer des fonctions membres, ce sera de toute façon toujours implémenté avec une fonction non membre (ou membre statique -- c'est parfois plus propre) qui redirige vers la fonction / instance voulue. Avec les threads ça se fait plutôt bien, puisque tu peux passer l'instance de ta classe en "user data".

  5. #5
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    Citation Envoyé par Laurent Gomila Voir le message
    Pas de solution dans la FAQ ? Et le code qui est donné c'est quoi ?
    la méthode est déclarée en statique .. ?

    Citation Envoyé par Laurent Gomila Voir le message
    De toute façon c'est une fonction C, qui attend un pointeur sur fonction libre et pas autre chose. Alors si tu trouves un mécanisme qui permet de passer des fonctions membres, ce sera de toute façon toujours implémenté avec une fonction non membre (ou membre statique -- c'est parfois plus propre) qui redirige vers la fonction / instance voulue. Avec les threads ça se fait plutôt bien, puisque tu peux passer l'instance de ta classe en "user data".
    voilà c'est plutot qqchose comme ca que je cherche

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    La solution de la FAQ ce n'est pas de passer la fonction en statique, c'est d'ajouter une fonction statique qui permet de rediriger vers la fonction membre (relis bien le code...).

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Points : 460
    Points
    460
    Par défaut
    Voici une partie de mon implémentation pour pouvoir appeler indirectement une fonction membre d'une classe (en fait l'operator() )

    Je n'ai pas regardé la FAQ, mais j'imagine que l'idée de base est la même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template<class F>
    void *thread_function(void *f)
    {
      (*static_cast<F *>(f))();
      return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    function_type func(...); // construit la classe, en fait un foncteur
    pthread_create(&th,0,&thread_function<function_type>,(void *)&func)

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/04/2009, 11h30
  2. Savoir utiliser les fonctions membres de class
    Par virtuadrack dans le forum C++
    Réponses: 12
    Dernier message: 02/02/2009, 13h17
  3. S.O.S : Fonctions membres et classes dérivées
    Par akira44 dans le forum C++
    Réponses: 3
    Dernier message: 26/06/2007, 20h53
  4. Problèmes de fonctions membres de classe templates, gcc3.3.6
    Par yves.dessertine dans le forum Autres éditeurs
    Réponses: 12
    Dernier message: 17/10/2005, 21h36
  5. Thread avec une fonction membre d'une classe
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 01/03/2004, 01h15

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