Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec la librairie pthread

Sujet résolu
    3 janvier 2009 à 22:16:36

    Bonjour à tous.
    Je n'arrive pas à créer un thread. En effet lorsque je compile ce thread :

    pthread_t thread;
    int a = pthread_create(&thread, NULL, lecture, NULL);
    


    Sachant que le prototype de la fonction 'lecture()' est :

    void* NomClasse::lecture(void* data);
    


    Il me dis :

    fichier.cpp:75:error:argument of type 'void*(NomClasse::)(void*)' doe not match 'void*(*)(void*)'


    Est-ce que quelqu'un pourrais m'aider ?
    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      3 janvier 2009 à 22:29:30

      Une fonction membre n'a pas la même signature qu'une fonction non membre. Ceci s'explique par le fait que ta fonction NomClasse::lecture (dont l'adresse est "&NomClasse::lecture" et non juste "lecture", d'ailleurs) aura besoin d'une instance de NomClass pour être appelée, tu ne peux pas juste la passer en tant que callback à une API C.

      La solution habituelle est d'utiliser une fonction non-membre, ou une fonction membre statique, de passer
      l'instance en tant que paramètre et rediriger vers une fonction membre ensuite.

      class NomClass
      {
      public :
      
          void Start()
          {
              pthread_t thread;
              int a = pthread_create(&thread, NULL, &NomClass::threadProc, this);
          }
      
      private :
      
          static void* threadProc(void* arg)
          {
              NomClass* ptr = static_cast<NomClass*>(arg);
              ptr->lecture();
              return NULL;
          }
      };
      
      • Partager sur Facebook
      • Partager sur Twitter

      Problème avec la librairie pthread

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown