Accueil > Forum > > > > Probleme threads
Probleme threads
mardi 9 mai 2006 à 12:01:27 |
Probleme threads

turnerom
|
Bonjour, je n'arrive pas à compiler ce petit programme servant a illustrer mon problème :
#include <iostream> #include <pthread.h> using namespace std; static pthread_mutex_t mutex; struct Foo { string f; Foo(); ~Foo(); void* affiche(void *p_data); }; Foo::Foo () { string tmp("Je suis Foo"); f=tmp; } Foo::~Foo() { } void* Foo::affiche(void *p_data) { cout << f << endl; return NULL; } int main() { pthread_mutex_init (&mutex, NULL); pthread_t thrd1; Foo f; pthread_create(&thrd1,NULL,f.affiche,NULL); pthread_join(thrd1, NULL); cout << "Fin" << endl; return 0; }
Ce programme ne fait pas grand chose, il sert juste d'illustration au problème que je rencontre.
Pourquoi le compilo me dit-il : fichier.cpp:40: error: argument of type `void*(Foo::)(void*)' does not match `void*(*)(void*)'Et comment résoudre mon problème. D'avance merci ! TuRn3r
|
|
mardi 9 mai 2006 à 12:08:36 |
Re : Probleme threads

AlexN
|
c'est pas class Foo que tu voulais écrire au lieu de struct Foo ?
|
|
mardi 9 mai 2006 à 12:08:53 |
Re : Probleme threads

laurent1024
|
Peux etre que ca vient du faite que Foo est une structure et pas une classe ++
|
|
mardi 9 mai 2006 à 12:10:06 |
Re : Probleme threads
|
mardi 9 mai 2006 à 12:29:05 |
Re : Probleme threads

turnerom
|
Non, ca ne vient pas de la. Dans mon prog j'ai bien class et j'ai la meme erreur. De plus une structure n'est jamais qu'une classe ou tout les membres sont publics.
En fait: struct Foo { string f; Foo(); ~Foo(); void* affiche(void *p_data); };
est absolument equivalent a: class Foo { public : string f; Foo(); ~Foo(); void* affiche(void *p_data); };
Mais merci quand meme !
TuRn3r
|
|
mardi 9 mai 2006 à 12:50:00 |
Re : Probleme threads

AlexN
|
Hum si les structures c'etaient stricto senso la même chose qu'une classe, personne les aurais inventé.
Ok syntaxiquement ça se ressemble. Mais les traitements et les propriétés d'une structure et d'une classe sont très très différents...Entre autres, ta fonction Foo() pour la structure est juste une fonction, tandis que pour la classe Foo c'est un constructeur.
En ce qui concerne les structure auto reférentes, il faut toujours faire préceder la définition de la structure par une declaration du type pointeur sur struct. Tu ne peux pas declarer la classe Foo, avant de l'avoir défini. Le compilateur ne connait pas la taille avant la definition. Il ne connait que la taille d'un pointeur.
|
|
mardi 9 mai 2006 à 13:53:33 |
Re : Probleme threads

turnerom
|
Admetons! dans le cas suivant alors, d'ou peut provenir l'erreur svp ?
#include <iostream> #include <pthread.h>
using namespace std;
static pthread_mutex_t mutex;
class Foo { public: string f; Foo(); ~Foo(); void* affiche(void *p_data); };
Foo::Foo () { string tmp("Je suis Foo"); f=tmp; }
Foo::~Foo() { }
void* Foo::affiche(void *p_data) { cout << f << endl; return NULL; }
int main() { pthread_mutex_init (&mutex, NULL);
pthread_t thrd1;
Foo f;
pthread_create(&thrd1,NULL,f.affiche,NULL);
pthread_join(thrd1, NULL);
cout << "Fin" << endl;
return 0; }
Pourquoi le compilo me dit-il : fichier.cpp:40: error: argument of type `void*(Foo::)(void*)' does not match `void*(*)(void*)' Et comment résoudre mon problème. D'avance merci !
TuRn3r
|
|
mardi 9 mai 2006 à 14:45:43 |
Re : Probleme threads

AlexN
|
Ligne 40 c'est laquelle ? vient du parametre de pthread_create() ? Le compilateur semble te dire qu'il attend un paramatère de type void*(*)(void*). tentes un cast void*(*)(void*) sur le paramètre f.affiche()
|
|
mardi 9 mai 2006 à 14:55:15 |
Re : Probleme threads

turnerom
|
Non, je viens d'essayer, pas mieu.
La ligne 40, qui pose problème est celle-la: pthread_create(&thrd1,NULL,f.affiche,NULL);
TuRn3r
|
|
mardi 9 mai 2006 à 16:20:08 |
Re : Probleme threads

AlexN
|
Réponse acceptée !
Il s'agit d'un problème de transtypage, mais je ne vois pas trop non plus. pcreate_thread ne semble pas aimer les parametres de type fonction membre ou le transtypage n'est pas écrit correctement. Il doit y avoir un moyen de forcer mais je ne vois pas. désolé.
essayes ça : c'est pas la bonne solution mais ça compile semble-t-il
void * p (void *t) { ((Foo *)t)->affiche(t); }
int main() { pthread_mutex_init (&mutex, NULL);
pthread_t thrd1;
Foo f; pthread_create(&thrd1,NULL,p,(void *)&f);
pthread_join(thrd1, NULL);
cout << "Fin" << endl;
return 0; }
Par contre si quelqu'un comprend son problème je suis aussi preneur !
|
|
Cette discussion est classée dans : problème, void, pthread, mutex, foo
Répondre à ce message
Sujets en rapport avec ce message
Problème utilisation pthread avec option static [ par ajollive ]
Bonjour, j'ai un code qui gère un système multithreadé avec des mutex. J'ai une interface HTTP qui me permet d'ajouter ou de killer des threads. La p
Sdl_net + pthread probleme d'argument [ par Defaite ]
Bonjour à tous.Voila mon problème, j'ai une thread ( en Pthread ) qui devrait s'occuper d'un socket.Seulement voila, impossible de dire à ma thread co
ARRTER UN PTHREAD [ par sebastienmz ]
Bonjours tlmje voudrais savoire comment on arrete un thread sous linux avec la librairie pthread.hen fait mon problème je lance un thread et a un mome
[UNIX]1 producteur N consomateurs [ par epmi212 ]
bonjour je doit rendre le probleme 1 prducteur N consomateurs la semaine prochaine mais j'ai un probleme de code je vois le probleme est ce que vous
probleme (segmentation) d'execution d'un thread [ par krusty24 ]
salut tout le monde j'ai besoin de votre aide pour m'aider a resoudre un petit probleme d'execution de mon programme en C-ANSI ce programme permet de
C(Linux)thread [ par noussa1985 ]
st tt le monde SVP eske qqu'1 pe m'aider à ecrire un code en C(Linux) en utilisant les threadsMon pgm permet de calculer le carré des entiers entre 0
Problème d'analyse sur polymorphisme [ par vinc1008881 ]
Bonjour à tous, Je me permets de solliciter votre expérience pour résoudre un petit problème qui me turlupine depuis qques jours... Je m'explique :
Problème <list> destructeur [ par exar ]
Bonjour à tous ! J'espère que quelqu'un pourra m'aider.Voiloà mon problème: j'ai créé une classe abstraite (nommons-la A) et deux classes filles (di
Problème avec string [ par visualstar ]
Bonjour, J'ai un problème en C++ avec les string.Comment peut-on faire pour passer un string à une fonction. Dans cette fonction, je fais un cin ; mai
Probleme thread linux ... [ par Tidam ]
Voila mon probleme, quand je ve compiler il me sort une erreur : passing `void (*)(void *)' as argument 3 of `pthread_create(pthread_t *, const pthrea
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|