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 :
main.c création du tableau
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 typedef struct joueur { SDL_Surface *image; SDL_Rect position; int nbr_joueur; SOCKET sock; } joueur;
fonction_SDL.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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_socket.c
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 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...
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...
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
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; }
Bonne journée !
Partager