Salut, comme l'indique mon titre, je suis en train de faire mon entrée dans le monde des threads et je galère un peu.
j'ai une classe TOTO de la forme : (je mélange déclaration et définition pour limité la longueur du post)
le principe c'est que j'ai un thread qui fais une boucle pour récupérer mes messages (et elle les place temporairement dans ma varaible ret) avec recup_mesg
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 class TOTO { public : void recup_mesg() // récupération des message { pthread_mutex_lock( &verrou ); ret.nb=recv(info.id,ret.buf,1500,0); // info.id est une socket tcp //surlaquelle je recois des message en xml pthread_mutex_unlock( &verrou ); } Recv get_mesg() // retourne ma variable { Recv temp; pthread_mutex_lock( &verrou ); temp = ret; pthread_mutex_unlock( &verrou ); return temp; } private : Recv ret; pthread_mutex_t verrou; } //AVEC : typedef struct { int nb; // Nombre d'octets recus char buf[1500]; } Recv;
et un autre thread qui est censé récupéré les message l'un après l'autre avec la fonction get_mesg pour les parser.
le problème c'est que si je fais un cout de ret.buf au niveau de la fonction recup_mesg, j'obtiens bien mon text xml brut, mais si je le fais dans la fonction get_mesg, j'obtiens un truc bizarre (en l'occurrence un m$ )
je vois pas vraiment d'où ça vient, je me demande si ça ne serait pas un problème de verouillage, mais je ne pense pas.
merci de votre aide !
Partager