Multi tâches

El Rabou Messages postés 4 Date d'inscription jeudi 16 décembre 2004 Statut Membre Dernière intervention 17 mai 2005 - 17 mai 2005 à 11:43
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 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...

26 réponses

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
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 !!!



sur ce, c'est pas si virtuel que ca finalement
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
17 mai 2005 à 17:04
[auteurdetail.aspx?ID=19734 vecchio56]> ca repond a ta question

impossible de caster du __thiscall en __stdcall (qui est implicite dans ton typedef), voila pourquoi ca compile pas



__thiscall:

mets this dans ecx, empile les parametres, call ta fonction

__stdcall:

empile les parametres, call ta fonction
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
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)
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
17 mai 2005 à 17:15
et ben voila tout est dit
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 mai 2005 à 17:18
D'accord cette fois j'ai enfin compris, c'est cette convention __thiscall que je connaissait pas. Merci à tous les deux
0
Rejoignez-nous