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

 C++ Discussion :

[Debutant] pthreads et classe/objets


Sujet :

C++

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 110
    Par défaut [Debutant] pthreads et classe/objets
    Bonjour,

    je viens de débuter sur les pthreads notamment sur la doc en C. Je voulais passer tout cela en C++ et j'ai notamment trouvé cela:

    Threads in C++

    qui m'aurait semblé être un bon début. Je pensais qu'il suffisait de mettre les bonnes fonctions de pthread, mais apparemment cela n'a pas l'air aussi simple. Donc, j'ai tenté un truc, mais cela ne fonctionne pas:

    my_thread.hpp
    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
    32
    33
    34
    35
    36
    37
     
    #include <pthread.h>
    #include <iostream>
    using namespace std;
     
    typedef pthread_t THREADID;
     
    class my_Thread
    {
    public:
     
      // Constructor
      my_Thread();
     
      // Destructor
      ~my_Thread();
     
      // Create the thread and start it
      int Start(void * arg);
     
     
    protected:
      int Run(void * arg);
      static void * EntryPoint(void*);
      virtual void* Execute(void*);
      void * Arg() const {return Arg_;}
      void Arg(void* a){Arg_ = a;}
     
     
    private:
      // Thread Id
      THREADID my_ThreadId_;
     
      // Arguments for the thread
      void * Arg_;
     
    };
    my_thread.cpp
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #include "my_thread.hpp"
     
    // Constructors
    my_Thread::my_Thread() {my_ThreadId_ = 0;};
     
    // Destructor
    my_Thread::~my_Thread() {};
     
    // Create the thread and start it
    int my_Thread::Start(void * arg)
    {
      int code=1;
      Arg(arg); // store user data
     
      if(pthread_create(&this->my_ThreadId_, NULL, my_Thread::EntryPoint, (void *)this))
        {
          cout << "Erreur" << endl;
        }
     
      return code;
    };
     
    // Start your code
    int my_Thread::Run(void * arg)
    {
      Execute(arg);
     
      return 0;
    };
     
    /*static */
    void * my_Thread::EntryPoint(void * pthis)
    {
      my_Thread* pt = (my_Thread*) pthis;
      pt->Run(pt->Arg());
      return NULL;
    };
     
    // Your code
    void* my_Thread::Execute(void* arg)
    {
      // Your code goes here
     
      /* ... */
      cout << "Hello World! "<< endl;
      return NULL;
    };
    prog.cpp
    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
    #include "my_thread.hpp"
    #include <iostream>
    using namespace std;
     
     
     
    int main()
    {
      my_Thread entree;
      int t=1;
     
      entree.Start((void *)t);
     
      return 0;
    }
    Compilation sous linux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    g++ -g -o my_thread.o -c my_thread.cpp
    g++ -g -o prog.o -c prog.cpp
    g++ -lpthread -g -o prog.exe my_thread.o prog.o
    Le debogueur me signal "Illegal instruction" au niveau du pt->Run(pt->Arg()). Il semble que c'est cette ligne qui pose problème: je n'ai pas l'affichage du "Hello World!". L'idée de reprendre la classe de cette manière me permettra notamment de gérer un thread=un objet.
    Voilà, si quelqu'un a des idées pour m'aider svp.

    PS: Ayant parcouru le forum, je tiens à signaler que je ne peux pas utiliser Boost: pthread m'est imposé par le projet sur lequel je suis, malheureusement.

  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
    Normal.
    Une fonction et une fonction membre c'est pas la même chose.

Discussions similaires

  1. [POO] [Classe/Objet] Conseils à un débutant en POO
    Par nicocolt dans le forum Langage
    Réponses: 9
    Dernier message: 08/03/2006, 10h06
  2. Réponses: 15
    Dernier message: 29/12/2005, 10h32
  3. [debutant][Classpath][Linux] Classe non trouvée
    Par oghma777 dans le forum Général Java
    Réponses: 5
    Dernier message: 15/10/2004, 21h26
  4. [Eclipse3.0][Debutant]Pas de .class généré
    Par willowII dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 10/08/2004, 17h07
  5. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28

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