El Rabou
Messages postés4Date d'inscriptionjeudi 16 décembre 2004StatutMembreDernière intervention17 mai 2005
-
17 mai 2005 à 11:43
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
17 mai 2005 à 17:18
Bonjour
je cherche a faire un thread qui soit une méthode d'un objet celle-ci étant non statique.
Le tout en Visual C++ 6. Bien sûr j'ai trouvé l'astuce de passer la fenêtre en paramètre au thread, mais cela ne me satisfait pas pour des raisons de design UML.
J'utilise actuellement CreateThread( ) pour créer le thread ce n'est peut etre de la que vient le problème (CreateThread n'accepte que les méthodes statiques ? ) .
Je suis preneur de toute suggestion.
Merci
C'est le manque de foi qui rend fous les hommes...
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 17 mai 2005 à 16:58
arnotic> sais tu que le code d'une fonction non statique existe en
memoire (= a une adresse directe) qu'il existe ou non des instances de
la classe en question ??? l'adresse d'une fonction membre non statique
est heureusement la meme quelque soit l'objet de ta classe !!!!! ( la
seule chose a differencier etant le pointeur this, pas le reste de la
fonction)
class test
{
private:
int i;
public:
void afficher()
{
cout << i << endl;
}
}
si je fais
test Obj1;
test Obj2;
l'adresse de Obj1.afficher() et celle de Obj2.afficher() est evidemment
la meme, et c'est la meme que n'importe quelle autre instance de la
classe test, future ou passée .... et elle est connue une bonne fois
pour toute pendant l'edition de lien.
meme s'il n'y a plus, ou s'il n'y a pas encore d'instance de la classe
test, la fonction afficher existe en mémoire... A l'edition de
lien elle doit sans doute avoir un nom prefixé par test:: mais bon....
si tu ne cree jamais d'instance de la classe test, et que ton compilo
est malin, effectivement le code de afficher ne sera pas mis dans ton
exe, mais c'est pas spécifique aux fonctions membres non statiques de
classe .....
"or si on ne déclare pas en statique nous n'ravons pas cette adresse mémoire de connues directement."
-> lol
toi tu comprends pas les langages objets ca te semble si mysterieux ??
Comme je l'ai dit, on ne peut pas creer un thread avec une fonction
membre non statique parce que la facon d'appeler une telle fonction est
du type __thiscall (et oui c'est une convention d'appel du C++
n'existant logiquement pas en C) et non pas __stdcall RIEN d'autre !!!
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 17 mai 2005 à 17:10
et creer explicitement des prototypes de fonction avec __thiscall comme
convention d'appel c'est pour plus tard ... (vs me sort : nonstandard
extension used : '__thiscall' keyword reserved for future use)
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 17 mai 2005 à 17:13
Les prototypes en thiscall ne sont effectivement pas possible la syntaxe équivalente c'est :
typedef DWORD (A::*FONCTION)( LPVOID LPARAM);
avec A le nom de la classe.
Vous n’avez pas trouvé la réponse que vous recherchez ?