Thread

Thread - C++ - Programmation

Marsh Posté le 04-10-2005 à 17:45:57    

Voila je dois pour le moment faire un serveur reseau multithread et c'est au niveau des threads que j'ai un problème...
 
La situation:
un serveur unix COMPAQ DS-20 (dual cpu alpha)...
avec Tru 64 dessus...
 
Donc voila mon problème se situe à la compilation...
Voila le problème
 
Je lance dans une méthode de ma classe des threads
avec pthread_create (&handlethread, 0, (void *(*)(void*)) maFonction, 0);
 
"mFonction" est une méthode de ma classe C++.
A la compilation, j'ai une erreur au niveau du pthread_create au niveau du troisième argument.
 
=> ERROR: invalide type conversion  
 
J'ai déjà essayé plein de chose, de ne pas mettre le "(void*(*)(void*))" etc...
 
la méthode "mafonction" est définie comme suit dans ma classe
 
void* NetworkManager::maFonction (void* param)
{
   ...
}
 
bon ben si quelqu'un pouvais mtn m'aider à lancer le thread ça m'arrangerais. J'ai déjà cherché sur le net mais sans succès. Il semble que ça soit propre au compilateur et à la version de l'os ce genre d'erreur.
Je signale qu'en C sur la même machine ça tourne sans problème. C'est uniquement quand je passe à C++ que j'ai le problème avec le pthread_create

Reply

Marsh Posté le 04-10-2005 à 17:45:57   

Reply

Marsh Posté le 04-10-2005 à 19:21:25    

il te faut soit :
- une fonction libre
- une fonction membre static (auquel cas, tu peux faire en sorte que le void* soit ton this)
 
Dans tous les cas : gaffe aux exceptions, si ça pète dans le C, c'est foutu.

Reply

Marsh Posté le 04-10-2005 à 19:35:33    

qu'entends tu par une fonction libre?
 
Dans le cas d'une méthode static, quel en est l'intéret exactement dans ce concept?  
 
Je tenterais le coup demain quand j'aurais accès à la machine.
Mais j'aimerais bien savoir ce qu'est une fonction/méthode libre.

Reply

Marsh Posté le 04-10-2005 à 22:09:37    

fonction libre == fonction non membre.
 
moi, j'aimerais savoir ce qu'est une méthode en C++ (libre de surcroit) :)

Reply

Marsh Posté le 04-10-2005 à 22:23:44    

Une fonction "libre" c'est une "unbound function", une fonction n'étant pas rattachée à un objet.
 
Fonction membre = méthode = fonction rattachée à un objet (faisant partie des comportements définis de l'objet)
 
Méthode libre = non sens


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 04-10-2005 à 22:50:34    

Citation :

Fonction membre = méthode = fonction rattachée à un objet (faisant partie des comportements définis de l'objet)


 
méthode = fonction membre && fonction membre == fonction rattachée à un objet.
 
le terme méthode ne s'emploi guère pour le C++

Message cité 1 fois
Message édité par ++fab le 04-10-2005 à 23:00:20
Reply

Marsh Posté le 04-10-2005 à 23:20:22    

++fab a écrit :

le terme méthode ne s'emploi guère pour le C++


la méthode est un concept présent dans tous les langages orientés objet, puisque c'est un concept tiré directement de l'OO [:pingouino]
(c'est le moyen par lequel on envoie un message à un objet)
 
Donc que toi tu l'utilises ou pas, tout le monde s'en fout [:pingouino]


Message édité par masklinn le 04-10-2005 à 23:22:02

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 04-10-2005 à 23:32:20    

conceptuellement sans aucuns doutes, mais "méthode" n'appartient pas au vocabulaire du C++, c'est un fait.

Reply

Marsh Posté le 06-10-2005 à 21:44:11    

méthode appartient au vocabulaire de la POO, donc appartient également au C++ puisque c'est un language OO. Maintenant si toi tu veux faire ton caca nerveux en prétendant le contraire, on s'en fou...

Reply

Marsh Posté le 06-10-2005 à 22:43:51    

moi23372 a écrit :

méthode appartient au vocabulaire de la POO, donc appartient également au C++ puisque c'est un language OO.


 
tu t'avances un peu la ...
 

Citation :

Maintenant si toi tu veux faire ton caca nerveux en prétendant le contraire, on s'en fou...


 
et bien je me fous de te répondre d'avantage.

Reply

Marsh Posté le 06-10-2005 à 22:43:51   

Reply

Marsh Posté le 08-10-2005 à 09:37:47    

sur quoi te base tu pour prétendre qu'on ne peu pas appeler les "fonctions" d'une classe "méthode"?
 
En tout cas, ayant eu des cours de C++ très poussé par des informaticiens plus que confirmé, le therme méthode à tjs été utilisé pour qualifier les "fonctions" d'une classe...

Reply

Marsh Posté le 08-10-2005 à 09:45:58    

j'aurais tendance a dire que methode/fonction c'est de l'enculage de mouton

Reply

Marsh Posté le 08-10-2005 à 09:48:45    

Encore un étudiant qui ne connaît pas le métier et qui veut donner des leçons. Ca me rappelle les querelles universitaires. Dis toi bien qu'en pratique on se fout du nom que ça porte du moment que tu sais ce que c'est et comment ça fonctionne.
 
Je rappelle au passage que c'est toi qui a demandé de l'aide. Envoyer bouler les anciens du forum n'est pas pour t'aider.

Reply

Marsh Posté le 08-10-2005 à 09:49:56    

ouais surtout qu'apres avoir eu des cours "tres poussé" il butte sur un probleme de base [:pingouino]

Reply

Marsh Posté le 08-10-2005 à 09:52:58    

C'est bien là la différence entre avoir pratiqué et avoir suivi un enseignement. Les priorités ne sont pas du tout les mêmes. Sans vouloir rentrer dans un débat stérile, en UML on les appelles opérations ou méthodes en fonction du niveau d'abstraction où on se place.


Message édité par slash33 le 08-10-2005 à 09:54:52
Reply

Marsh Posté le 08-10-2005 à 14:44:03    

chrisbk a écrit :

j'aurais tendance a dire que methode/fonction c'est de l'enculage de mouton


 
stérilement parlant : plus ou moins profondément :)
Le terme méthode n'apparait à aucun moment dans la norme (sauf erreur probable de ma part).
Ce terme vient d'ailleurs. En Java, par exemple on parle de méthode. Celles-ci ont un comportement voisin des fonctions virtuelles en C++. Si bien que certains traduise méthode par fonctions virtuelles (comme Stroustrup le fait), d'autres par fonctions membres (virtuelles ou non).  
Du fait de l'ambiguité, je pense que méthode n'est pas un terme à employer en C++.

Reply

Marsh Posté le 08-10-2005 à 16:09:45    

ouais, monidee est que quand on veut parler de fonction virtuelle on dit fonction virtuelle, et basta :d

Reply

Marsh Posté le 08-10-2005 à 17:21:47    

++fab a écrit :

stérilement parlant : plus ou moins profondément :)
Le terme méthode n'apparait à aucun moment dans la norme (sauf erreur probable de ma part).
Ce terme vient d'ailleurs. En Java, par exemple on parle de méthode. Celles-ci ont un comportement voisin des fonctions virtuelles en C++. Si bien que certains traduise méthode par fonctions virtuelles (comme Stroustrup le fait), d'autres par fonctions membres (virtuelles ou non).  
Du fait de l'ambiguité, je pense que méthode n'est pas un terme à employer en C++.


Citation :

In computer science in particular, a method is another name for an action, algorithm, function, or procedure; more specifically, in object-oriented programming, it is an implementation of code responding to certain messages.


http://en.wikipedia.org/wiki/Method
 
La méthode est l'implémentation de la réponse à un message, appeler une méthode c'est enovoyer un message à un objet (concepts de base de la POO, un objet contient des données et répond à des messages, les données sont les variables membres et l'envoi des messages se fait via les méthodes, fonctions membres des objets). Rien de plus, rien de moins [:spamafote]


Message édité par masklinn le 08-10-2005 à 17:23:33

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-10-2005 à 17:38:15    

vous radotez mon cher [:spamafote]
Je parle de C++ (je suis dans la bonne cat), tu parles OO de manière générale [:spamafote]

Reply

Marsh Posté le 08-10-2005 à 22:27:27    

++fab a écrit :

Je parle de C++ (je suis dans la bonne cat), tu parles OO de manière générale [:spamafote]


Et aux dernières nouvelles, bien que le C++ soit un langage multi-paradigmes, on l'utilise souvent pour faire de la POO [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-10-2005 à 22:58:25    

masklinn a écrit :

Et aux dernières nouvelles, bien que le C++ soit un langage multi-paradigmes, on l'utilise souvent pour faire de la POO [:petrus75]


 
voui, mais bien qu'il supporte la POO, quand on parle de C++, on emploie quand même le vocabulaire ad hoc. Sinon, tu risque de choquer les intégristes :o

Reply

Marsh Posté le 08-10-2005 à 23:15:03    

++fab a écrit :

voui, mais bien qu'il supporte la POO, quand on parle de C++, on emploie quand même le vocabulaire ad hoc. Sinon, tu risque de choquer les intégristes :o


Le vocabulaire ad-hoc quand on parle de POO, c'est le vocabulaire de la POO, la seule personne que ça semble choquer c'est toi [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-10-2005 à 23:15:52    

roh les deux tetes de pioches purée

Reply

Marsh Posté le 08-10-2005 à 23:21:50    

mais on ne parle pas de POO, on parle de C++ :D etc ...

Reply

Marsh Posté le 09-10-2005 à 13:51:19    

Vous vous êtes gourrés de thread  :sleep:


Message édité par slash33 le 09-10-2005 à 13:54:26
Reply

Marsh Posté le 09-10-2005 à 20:25:34    

c'est bon j'ai ma réponse depuis longtemps (depuis le premier message). Que vous appeliez ça méthode ou autre, pour moi c'est une méthode. Chacun son vocabulaire...


Message édité par moi23372 le 09-10-2005 à 20:25:57
Reply

Marsh Posté le 09-10-2005 à 21:01:34    

moi j'appelle ca un melon

Reply

Marsh Posté le 09-10-2005 à 22:18:53    

http://www.mse.berkeley.edu/groups/haller/nicols/germany/melon.jpg
 
[:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-12-2005 à 22:46:44    

Bonjour, j'ai le même probleme que toi... En fait, je suis embeter car le thread que je dois lancer doit utiliser une fonction qui n'est pas libre et qui doit appeller d'autre fonction dans la meme classe...
Ya t'-il une solution pour utiliser des threads sans utiliser de fonctions libres ?

Reply

Marsh Posté le 30-12-2005 à 23:05:39    

boost::thread
boost::bind
loki::functor

Reply

Marsh Posté le 31-12-2005 à 08:45:27    

Ta fonction "libre" (static) qui lance le thread a normalement la possibilité d'avoir un argument, il suffit de mettre le pointeur de ta classe (this) et là tu lances la fonction membre de ta classe pour gérer le thread et elle aura accès à tous les éléments de cette classe.

Reply

Marsh Posté le 02-01-2006 à 09:58:04    

moi23372 a écrit :

sur quoi te base tu pour prétendre qu'on ne peu pas appeler les "fonctions" d'une classe "méthode"?
 
En tout cas, ayant eu des cours de C++ très poussé par des informaticiens plus que confirmé, le therme méthode à tjs été utilisé pour qualifier les "fonctions" d'une classe...


 
LOL


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 10-01-2006 à 11:22:09    

cricri_ a écrit :

Ta fonction "libre" (static) qui lance le thread a normalement la possibilité d'avoir un argument, il suffit de mettre le pointeur de ta classe (this) et là tu lances la fonction membre de ta classe pour gérer le thread et elle aura accès à tous les éléments de cette classe.


 
C'est une solution tout à fait correcte, exemple :
 
void MyClass::Thread()
{
...
}
 
void MyClass::StartThread()
{
 DWORD id;
 
 mThreadID = CreateThread(NULL,4096,thread,this,CREATE_SUSPENDED ,&id));
...
 ResumeThread(mThreadID);
...
}
 
et la fonction libre :
static DWORD WINAPI thread(void far *param)
{
 ((MyClass*)param)->Thread();
 Sleep(0);
 return 0;
}


Message édité par fat le 10-01-2006 à 11:22:52
Reply

Marsh Posté le 10-01-2006 à 14:30:47    

((MyClass*)param)->Thread();
 
on fait du C ? :o


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 17-01-2006 à 11:27:06    

J'ai eu un probleme similaire sous Solaris bien qu'un peu different.  
Essaye d'ajouter devant la fonction membre de la classe, le nom de la classe ie :  &myclass::member

Reply

Marsh Posté le 17-01-2006 à 12:06:41    

Oups desole ca ne marche pas, il semble que la seule solution est bien de passer par une function libre et de passer ton object en parametre.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed