Bonjour,

J'espère que le code est lisible.

je souhaite traiter les évènements sdl dans un thread (pour plus de réactivité)

J'ai crée deux structures :
- une pour passer plusieurs arguments dans pthread_create
- une pour récupérer les évènements

Pour faire simple, j'essaye déjà de gérer uniquement l'évènement "fermer" (la croix)

Structure pour envoyer le arguments à la fonction de routine du thread :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedef struct args_thread{
  ListeAnimal l;
  struct back_thread *b;
}args_thread;
 
args_thread *cree_struct_arg_thread(ListeAnimal l, back_thread *b);
 
 
args_thread *cree_struct_arg_thread(ListeAnimal l, back_thread *b){
  args_thread *res=(args_thread *)malloc(sizeof(args_thread));
  res->l=l;
  res->b=b;
  return res;
}
Structure pour récupérer le résultat du thread : (à terme j'aurai beaucoup de variables à récuperer)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
typedef struct back_thread{
  int continuer;
}back_thread;
La fonction de routine :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
void *evenements (ListeAnimal l, args_thread *args){
	SDL_Event event;
	 while(SDL_PollEvent(&event)){
             switch (event.type){
             case SDL_QUIT :
		args->b->continuer = 0;
		break;
     }
   }
}
Et enfin dans le main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
  back_thread *bt=(back_thread *)malloc(sizeof(back_thread));
  bt->continuer=1;
 
  args_thread *arguments=NULL;
  arguments=cree_struct_arg_thread(ens_animaux, bt);
 
  pthread_create(&thread_evenements,NULL,(void *)evenements,(void *)arguments);
 
while (bt->continuer && tailleListeAnimal(ens_animaux)>0){
 
 //Algo principal
 
}

Pour l'instant, si je le lance je n'ai pas de crash, mais ca ne fonctionne pas (de plus j'ai mis un printf pour vérifier la valeur de continuer, mais elle ne change pas.



Merci d'avoir pris le temps de lire mon post,
je sèche quant à une solution, ai-je loupé quelque chose dans le thread ?

merci


EDIT : en fait j'ai résolu mon problème, c'etait très bete, j'avais mis les mauvais arguments dans la fonction de routine ...

si mon code peut quand meme servir à quelqu'un