IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

[pthread] passer un tableau de structures en paramètre


Sujet :

C

  1. #1
    Membre du Club
    Developpeur C
    Inscrit en
    Octobre 2009
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Developpeur C

    Informations forums :
    Inscription : Octobre 2009
    Messages : 48
    Points : 45
    Points
    45
    Par défaut [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 : 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;
    main.c création du tableau
    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_SDL.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...
    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
    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 !

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Pouvez vous décrire l'erreur que vous avez, car actuellement, j'ai l'impression que c'est juste.
    Lors de votre description, expliquez avec détails l'erreur (compilation / exécution).

    De plus, en faisant comme voutes, les deux threads peuvent modifier le tableau de joueur, ce qui peut être un peu.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre du Club
    Developpeur C
    Inscrit en
    Octobre 2009
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Developpeur C

    Informations forums :
    Inscription : Octobre 2009
    Messages : 48
    Points : 45
    Points
    45
    Par défaut
    L'erreur que j'ai est la modification du contenu de certaines variables de la structure. Vous me dite justement que les deux thread peuvent modifier le tableau, mais de quelle manière ?

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Les deux threads peuvent modifié le tableau en utilisant le pointeur que vous envoyé à au thread.
    Si vous voulez avoir deux tableaux, il faut faire une copie.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre du Club
    Developpeur C
    Inscrit en
    Octobre 2009
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Developpeur C

    Informations forums :
    Inscription : Octobre 2009
    Messages : 48
    Points : 45
    Points
    45
    Par défaut
    oui je cherche en effet à modifier le contenu du tableau, mais j'ai l'impression de le faire de la mauvaise manière, en effet, le contenu des variables n'est pas celui attendu... je me suis donc dit que je passai mon tableau en argument de la mauvaise façon ou que je l'utilisai de la mauvaise façon dans mon thread..

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Citation Envoyé par guidono Voir le message
    oui je cherche en effet à modifier le contenu du tableau, mais j'ai l'impression de le faire de la mauvaise manière, en effet, le contenu des variables n'est pas celui attendu... je me suis donc dit que je passai mon tableau en argument de la mauvaise façon ou que je l'utilisai de la mauvaise façon dans mon thread..
    Peut être que le tableau est mal initialisé ... simplement et du coup ... le contenu est corrompu
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/11/2012, 19h21
  2. Réponses: 4
    Dernier message: 08/11/2012, 15h11
  3. passer un tableau de structure d'un objet a un autre
    Par msahli3 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/03/2009, 15h27
  4. Réponses: 8
    Dernier message: 17/09/2008, 12h11
  5. Comment passer un tableau de structure à une fonction
    Par mackla dans le forum Débuter
    Réponses: 12
    Dernier message: 01/06/2008, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo