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

Threads & Processus C++ Discussion :

pthread et POO


Sujet :

Threads & Processus C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 2
    Par défaut pthread et POO
    Bonjour à tous,

    Voilà ma question est toute bête, mais je m'échine depuis des heures à trouver un topic qui parle de ça, en vain.

    Je souhaite utiliser des threads dans un programme en c++. Pour cela je crée un thread avec pthread_create, dont le prototype est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int pthread_create(pthread_t* thread, pthread_attr_t* attr, void*(*start_routine)(void*), void* arg);
    Seulement voilà, j'aimerais beaucoup pouvoir passer une méthode de ma classe dans le 3ème attribut (callback), mais il semblerait que je sois obligé de passer une méthode statique, et du coup je n'ai pas accès à mes variables de classe, ce qui ne m'arrange pas du tout.

    Y a-t-il moyen de contourner cette limitation ? J'ai pensé à passer this en 4ème argument (les arguments utilisés par star_routine), mais ça ne marche pas...

  2. #2
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut
    Bonjour,

    Si tu tapes "pthread class Thread" dans ton moteur de recherche favori, tu devrais trouver ton bonheur.

    Comme avec de nombreuses bibliothèques C, pthread te permet de promener un
    void* qui peut être un objet (void* arg).

    PS :
    - ça me semble bizarre d'utiliser pthread dans du C++/CLI
    - Si c'est pour de la portabilité, boost::thread est infiniment plus pratique et les thread de C++ 11 devraient y ressembler beaucoup

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Par défaut
    Citation Envoyé par BigNozMG Voir le message
    Seulement voilà, j'aimerais beaucoup pouvoir passer une méthode de ma classe dans le 3ème attribut (callback), mais il semblerait que je sois obligé de passer une méthode statique, et du coup je n'ai pas accès à mes variables de classe, ce qui ne m'arrange pas du tout.

    Y a-t-il moyen de contourner cette limitation ? J'ai pensé à passer this en 4ème argument (les arguments utilisés par star_routine), mais ça ne marche pas...
    Oui en effet, j'ai déjà eu ce genre de "souci". Il faut que la méthode de la classe soit statique, que tu passe this et que les variables utilisées dans le thread soient aussi statiques.
    Je rejoins bretus sur les questions de l'environnement, as-tu posté au bon endroit ? Parce que pthread sous Windows ça existe mais c'est pas top (vu que c'est une adaptation de Linux avec des implémentations en moins).

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 472
    Par défaut
    les variables utilisées dans le thread soient aussi statiques
    Heu, non il faut juste qu'elles ne soient pas libérées automatiquement, comme en fin de la fonction ayant créé le thread par exemple si c'est des variables sur la pile.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 2
    Par défaut
    @mala92 et @bretus : Effectivement je me suis trompé de forum, j'ai cliqué sur le premier c++ que j'ai vu, j'ai pas fait gaffe que j'étais dans la partie dotnet... Au temps pour moi. En fait je développe ce projet sous linux.

    @bretus : J'ai jeté un œil à boost::thread, et ouais on dirait bien que c'est ce qu'il me fallait.

    Pour ce qui est de mon problème, vu que c'est pour un projet scolaire que je dois rendre pour jeudi dernier je n'ai pas le temps d'utiliser boost::thread, donc j'ai contourné le truc en changeant ce que je voulais faire, donc mon thread n'a plus besoin d'accéder aux variables de ma classe.

    Du coup la méthode suivante, bien que très sale, a résolu mon problème :
    - je passe (void*) this en argument
    - dans la fonction callBack, je fais un Audio* audio = (Audio*) argument; (ma classe s'appelle Audio, vous l'aurez deviné...)
    - du coup j'ai accès à une copie de mon instance initiale, qui dispose des mêmes attributs au moment où je la crée, et c'est suffisant pour mes besoins.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 472
    Par défaut
    Votre méthode n'a rien de "sale", BigNozMG.

    C'est une très bonne méthode.

    Faire de "la fonction callBack" une méthode statique de la Classe Audio et c'est nickel.

    Attention, vous ne fait pas une copie de l'objet. Cela peut être un problème si votre "this" est un objet dans la stack (variables automatiquement créées-initialisées et deletées-désallouées).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POO] C'est quoi une classe en claire...???
    Par Spack dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 26/01/2009, 15h53
  2. Pthread et semaphores
    Par Yabo dans le forum Linux
    Réponses: 9
    Dernier message: 30/03/2008, 00h09
  3. [langage] Pb POO perl
    Par loothoof dans le forum Langage
    Réponses: 4
    Dernier message: 26/05/2004, 12h08
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. lier un cube à un objet (POO)
    Par Hypnos dans le forum OpenGL
    Réponses: 12
    Dernier message: 26/08/2003, 21h46

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