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 :

Souci avec les paramettre sur une methode ?


Sujet :

Threads & Processus C++

Vue hybride

panthere noire Souci avec les paramettre sur... 16/06/2012, 17h41
Trademark Salut, C'est normal, en... 17/06/2012, 13h48
panthere noire merci pour ta réponse je vai... 17/06/2012, 20h23
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Par défaut Souci avec les paramettre sur une methode ?
    Bonjours

    Je ne parviens pas a trouver la bonne syntaxe : &cPthread::affichage() devrai convenir mai le compilateur ne l'entend pas de cette oreille .

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    /*
    message d'erreur:
    */
    cPthread.cpp: In member function ‘void cPthread::Start_Thread_1()’:
    cPthread.cpp:29: error: no matching function for call to ‘cPthread::lire()’
    cPthread.cpp:13: note: candidates are: void* cPthread::lire(void*)
    cPthread.cpp: In member function ‘void cPthread::Start_Thread_2()’:
    cPthread.cpp:37: error: no matching function for call to ‘cPthread::affichage()’
    cPthread.cpp:3: note: candidates are: void* cPthread::affichage(void*)
     
    /*Le cpp*/
    #include "cPthread.hpp"
     
    void* cPthread::affichage (void *){
    	std::cout << "Entree Thread lire" << std::endl;
    	int L = 0;
    	while (50 != L) {
    		std::cout << "Thread lire" << std::endl;
    		 sleep (1);
    		 L++;
    	}
    	return NULL;
    }
    void* cPthread::lire (void *){
    	std::cout << "Entree Thread affiche" << std::endl;
    	int  L = 0;
    	while (80 != L) {
    		std::cout << "Thread affiche" << std::endl;
    		 sleep (1);
    		 L++;
    	}
    	return NULL;
    }
     
    void cPthread::Start_Thread_1 (){
      pthread_attr_t attr;
      pthread_t thread;
      pthread_attr_init (&attr);
      pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
      pthread_create (&thread, &attr, &cPthread::lire(), NULL);
      pthread_attr_destroy (&attr);
    }
    void cPthread::Start_Thread_2 (){
      pthread_attr_t attr;
      pthread_t thread;
      pthread_attr_init (&attr);
      pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
      pthread_create (&thread, &attr, &cPthread::affichage(), NULL);
      pthread_attr_destroy (&attr);
    }
     
    /*le *-hpp*/
    #ifndef DEF_ME__PTHREAD
    #define DEF_ME__PTHREAD
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    class cPthread{
    	public:
    		cPthread (){};
    	void Start_Thread_1 ();
    	void Start_Thread_2 ();
    	private:
    	void* affichage (void *);
    	void* lire (void *);
     
    };
    #endif
    Merci d'avance

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Salut,

    C'est normal, en fait si tu réfléchis un peu, tu comprends que tu passes en paramètre un pointeur vers une méthode d'une instance de cPthread... Et tu ne peux pas utiliser la méthode d'un objet qui n'existe pas...

    Ceci dit, il y a deux solutions parmi d'autres. Soit tes méthodes n'ont pas besoin de manipuler des objets membres de la classe, dans ce cas, tu passes ta fonction en static.

    Soit tes méthodes modifient des membres de ta classe et la tu fais une fonction wrapper :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void* wrap_print(void* cpthread)
    {
      cPthread* c = static_cast<cPthread*>(cpthread);
      c->afficher(...);
    }
    A toi de voir, mais si tu utilises la deuxième technique, il faut que tu fasses attention aux accès concurrent des membres de ta classe.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Par défaut
    merci pour ta réponse je vai essayer de comprendre les 2 solution ou plutôt de les mettre en pratique

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

Discussions similaires

  1. Binding sur une methode avec un argument dynamique?
    Par takinelinfo dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 19/05/2011, 14h39
  2. Souci avec le setInterval sur une balise <button>
    Par jep33 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/09/2009, 13h50
  3. Réponses: 9
    Dernier message: 09/12/2008, 00h07
  4. Réponses: 2
    Dernier message: 18/03/2008, 17h09
  5. Problème avec les indexes sur une base de données.
    Par osoudee dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/02/2006, 09h24

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