[pthread] passer un tableau de structures en paramètre
Salut !
Voici mon problème : j'ai un peu de mal avec les pointeurs ici donc c'est pas facile... j'ai un tableau qui contient dans chaque case une structure représentant un joueur.
Je lance au début de mon programme un thread "recv" dans laquelle je veux passer en paramètre mon tableau, car dans ce thread, je reçois des coordonnées, via une socket, que je veux envoyer dans une des structures du tableau (et afficher plus tard les nouvelles coordonnées du joueur).
Mais c'est ce passage du tableau en paramètre qui me pose problème... je vais vous montrer le parcours de ce tableau dans mes fonction :
détail de la structure avant tout :
Code:
1 2 3 4 5 6 7
|
typedef struct joueur {
SDL_Surface *image;
SDL_Rect position;
int nbr_joueur;
SOCKET sock;
} joueur; |
main.c création du tableau
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
//création d'un tableau qui contiendra une structure par joueur
joueur *liste_j[2];
//création d'un joueur
joueur joueur_1;
//on place le 1er joueur dans la 1er case de la liste
liste_j[0] = &joueur_1;
//(un autre joueur est créé plus tard dans le code
//code... |
fonction_SDL.c
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
void start_routine(SDL_Surface **ecran_t, joueur *joueurs[], SDL_Surface *image) {
//code...
pthread_t thread;
//on lance le thread pour recevoir des données
if(pthread_create(&thread, NULL, fonction_recv, joueurs) == 0) {
printf("> Thread RECV cree.\n");
} else {
printf("# erreur lors de la création du thread RECV.\n");
}
//code... |
fonction_socket.c
Code:
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 32 33 34 35
|
void* fonction_recv(void* data) {
joueur *j = (joueur*)data;
char buffer[255] = "";
int coords[2] = {0,0};
int x = 0;
int y = 0;
int sock_err = 0;
//on simule l'arrivée d'un joueur
j[0]->nbr_joueur = 2;
while(sock_err != SOCKET_ERROR) {
sock_err = recv(j->sock, buffer, 255, 0);
if(sock_err != SOCKET_ERROR) {
coords_int(buffer, coords);
x = coords[0];
y = coords[1];
printf("Coord recues : (%d,%d)\n", x, y);
/* Je voudrai faire quelque chose comme ça : */
j[1]->position.x = x;
j[1]->position.y = y;
} else {
printf("# Erreur pour recevoir les coord depuis la sock %ld.\n", j->sock);
}
}
return NULL;
} |
Voilà, si vous pouviez m'aider, me donner un indice pour mieux comprendre cette histoire de pointeurs car avec ce système de paramètre avec les thread j'ai un peu de mal...
Bonne journée !