Bonjour le monde,

Ok... j'utilise une extension GNU pth qui permet de gérer les thread dans un thread. Donc le kernel de linux croit qu'il n'y a qu'un thread alors que j'en fais tourner plusieurs... mais là n'es pas la question...

J'utilise une fonction de pth nommée pth_event() qui demande trois argument, le premier est le type d'event (dans mon cas FUNC, qui permet de faire en sorte que pth appel une methode tout les x temps), le second un pointeur vers la fonction voulue, un troisième qui représente les arguments de la fonction et un dernier qui défini le temps entre les appels.

Mon problème est le suivant. J'aimerais lui passer en paramètre un pointeur vers une fonction de broker. Alors je tape le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
pth_event(FUNC,&StartReceiveNoThread,NULL,pth_time(0,50));
ma fonction (ReceiveNoThread est une fonction de la classe broker...):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
void paroc_broker::StartReceiveNoThread(){
  if (ReceiveNoThread()){
    printf("Request getted\n");
  }else{
    printf("no Request to get\n");
  }
}
et le compilateur me retourne l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
broker.cc:261: error: ISO C++ forbids taking the address of an unqualified
   non-static member function to form a pointer to member function.  Say `&
   paroc_broker::StartReceiveNoThread'
Je vérifie ma fonction. Elle est pas static. Heureux d'avoir trouvé si vite mon problème je la met en static.
La compilation passe, mais bien sur comme elle est en static elle ne peut plus atteindre l'objet broker et donc il ne voit plus ma fonction ReceiveNoThread.

Je me décourage pas et je construit une struct qui contient le broker que je passe en paramètre à StartReiceiveNoThread()

Le problème est que la struct doit être déclarer dans le broker.h et si je le déclare comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
#include ...
...
struct myStruct
{
broker * br;
mySocket * s;
}
 
class broker {
...
}
Il me sort l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
../include/broker.h:47: ERROR :broker has been declared as non-class data type
je me suis dit... ok il sait pas encore ce qu'est broker alors je l'ai mise à la fin du .h, mais il me sort une autre erreurs... dans la fonction StartReceiveNoThread() dont voici la nouvelle implémentation utilisant la structure
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
void paroc_broker::StartReceiveNoThread(myStruct * pnt){
  if (pnt->br.ReceiveNoThread(pnt->s,50)){
    printf("Request getted\n");
  }else{
    printf("no Request to get\n");
  }
}
 
erreur à la compilation :
broker.cc:500: error: request for member `ReceiveNoThread' in `
   pnt->myStruct::br', which is of non-aggregate type `broker*

Je sais pas trop de quoi ca peut venir... Auriez vous une idée par hasard ?