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

Bibliothèques Discussion :

Heritage et pThread : comment se passer de la méthode static ?


Sujet :

Bibliothèques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Responsable de projet
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut Heritage et pThread : comment se passer de la méthode static ?
    Bonjour à tous,

    J'aimerais créer une classe nommé "Thread" auquel des sous classe Thread_XXXX heriterais de ses caractéristiques. Cette Fameuse classe Thread j'aimerais la rendre virtuel de préférence, car elle n'as aucunement besoin d'etre implémenté.

    Le schéma :


    le soucis :
    Mes classes Thread_XXXX doivent surcharger la methode run qui est le code qui serat exécuté dans le thread.
    Le constructeur du Thread quant à lui fait un pthread_create qui renseigne cette methode run.

    Pour que le pthread_create accepte cette methode je dois la mettre en static, ce qui m'empeche de faire une surcharge via les sous classes de thread.

    Le code de Thread :

    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
     
    #include <pthread.h>
     
    class Thread {
     
    	private:
    		pthread_t thread;
    		static void* run(void*);
     
    	public:
    		Thread();
    		~Thread();
     
    		void start();
    		void stop();
     
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include "Thread.hpp"
     
    void Thread::start() {
    	pthread_create (&this->thread, NULL, this->run, NULL);
    }
     
    void* Thread::run(void*) {
     
    }

    Je ne sais pas du tout comment contourner ce probléme, car j'aimerais par la suite rajouter une fabrique pour pouvoir aisément creer mes threads en tout genre.

    Je vous remercie d'avance de vos éventuelles sugestions.
    Merci.

  2. #2
    Membre confirmé
    Profil pro
    Responsable de projet
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut
    Réponse trouvée merci quand même.

  3. #3
    Membre confirmé
    Profil pro
    Responsable de projet
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut
    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
    #ifndef CTHREAD_H
    #define CTHREAD_H
     
    #include <pthread.h>
     
    class CThread {
     
    	private:
    		pthread_t thread;
    		static void *thread_func(void *d) {
    			((CThread *)d)->run(); 
    			return 0;
    		}
     
    	public:
    		CThread() {
    		}
     
    		virtual ~CThread() {
    		}
     
    		virtual void run() = 0;
     
    		void start() {
    			pthread_create ( &thread, NULL, CThread::thread_func, (void*)this );
    		}
     
    		void stop() {
    			pthread_exit (NULL);
    		}
     
    		void wait() {
    			pthread_join (thread, NULL);
    		}
     
    };
     
    #endif

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

Discussions similaires

  1. [Traitement image] Comment me passer d'un PictureDialog
    Par alex7532 dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/02/2007, 23h31
  2. Comment ce passer de NuméroAuto ?
    Par Cantalou dans le forum Access
    Réponses: 3
    Dernier message: 23/01/2006, 09h44
  3. [Debutant] comment faire passer des donnée ???
    Par cyrill.gremaud dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 17/01/2006, 22h28
  4. Comment faire passer un menu par dessus une autre frame
    Par barthelv dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/11/2005, 11h03
  5. Réponses: 5
    Dernier message: 08/03/2004, 10h28

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