Thread - C++ - Programmation
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.
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.
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)
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
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++
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
(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
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.
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...
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.
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...
Marsh Posté le 08-10-2005 à 09:45:58
ReplyMarsh 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.
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
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.
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++.
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
Marsh Posté le 08-10-2005 à 17:21:47
++fab a écrit : stérilement parlant : plus ou moins profondément |
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
Marsh Posté le 08-10-2005 à 17:38:15
vous radotez mon cher
Je parle de C++ (je suis dans la bonne cat), tu parles OO de manière générale
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 |
Et aux dernières nouvelles, bien que le C++ soit un langage multi-paradigmes, on l'utilise souvent pour faire de la POO
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 |
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
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 |
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
Marsh Posté le 09-10-2005 à 13:51:19
Vous vous êtes gourrés de thread
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...
Marsh Posté le 09-10-2005 à 22:18:53
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 ?
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.
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"? |
LOL
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;
}
Marsh Posté le 10-01-2006 à 14:30:47
((MyClass*)param)->Thread();
on fait du C ?
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
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.
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