[C++] passer une fonction menbre à CreateThread

passer une fonction menbre à CreateThread [C++] - Programmation

Marsh Posté le 09-06-2002 à 19:00:38    

lut, la fonction CreateThread pour un de ces arguments, un pointeur sur une fonction. je voudrai fait la même chose mais avec une fonction menbre :
 

Code :
  1. BOOL ServeurTCP::start()
  2. {
  3.     DWORD  threadID;
  4.    CreateThread (NULL, 0,
  5.    &ServeurTCP::attenteTCP,
  6.    NULL, 0, &threadID);
  7. }


 
ou attenteTCP et start sont des fonctions menbre de la classe ServeurTCP.
 
le compilo me dit qu'il ne peut pas convertire ma fonction menbre en une fonction accecptable par CreateThread :
 
Error:  serveurtcp.cpp(23,23):Cannot convert 'unsigned long (__stdcall ServeurTCP::*)(void *)' to 'unsigned long (__stdcall *)(void *)'
 
 
:??:

Reply

Marsh Posté le 09-06-2002 à 19:00:38   

Reply

Marsh Posté le 09-06-2002 à 19:07:22    

Pour utiliser une méthode dans un callback, il faut qu'elle soit statique.

Reply

Marsh Posté le 09-06-2002 à 19:13:47    

merci, effectivement ca marche mieu. mais n'y a t'il pas un autre moyen car la si je met ma fonction menbre en static tout ce qu'elle utilise "de l'exterieur" doit aussi être statique. :(

Reply

Marsh Posté le 09-06-2002 à 19:19:36    

sanglier04 a écrit a écrit :

merci, effectivement ca marche mieu. mais n'y a t'il pas un autre moyen car la si je met ma fonction menbre en static tout ce qu'elle utilise "de l'exterieur" doit aussi être statique. :(  




 
Tu n'as qu'à passer un pointeur vers l'objet en paramètre de la méthode statique.

Reply

Marsh Posté le 09-06-2002 à 19:20:32    

Code :
  1. class A {
  2.         public:
  3.         void test(){}
  4.         static void cbA(A&);
  5. };
  6. void A::cbA(A& a) {
  7.         a.test();
  8. }
  9. int main() {
  10.         A a;
  11.         A::cbA(a);
  12. }


Message édité par verdoux le 06-09-2002 à 19:20:45
Reply

Marsh Posté le 09-06-2002 à 19:27:22    

merci :)

Reply

Sujets relatifs:

Leave a Replay

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