Interactions de l'utilisateur et threads avec <pthread.h>

Résolu/Fermé
XecK Messages postés 386 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 - 20 janv. 2013 à 23:20
XecK Messages postés 386 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 - 21 janv. 2013 à 08:15
Bonjour à tous, j'essaye actuellement de créer un casse-brique en C, et je voulais essayer d'optimiser un peu mon programme pour plusieurs coeurs avec deux threads (pour commencer) en utilisant la bibliothèque <pthread.h>.

En gros, je voulais faire un thread gérant la partie graphique, un thread gérant l'évolution des items avec le temps, et le programme principal gérant les interactions de l'utilisateur avec SDL_WaitEvent(&event), le tout étant relié par des variables globales (partagées entre les threads).

Problème : les interactions ne marchent pas.

Voilà le code au niveau des interactions :
while(statut == 1)
{
SDL_WaitEvent(&event);
pthread_mutex_lock(&mutex);
switch(event.type)
{
case SDL_QUIT:
statut = 0;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE:
statut = 0;
break;
case SDLK_RETURN:
statut = 0;
break;
case SDLK_SPACE:
statut = 0;
break;
case SDLK_UP:
if (selection > 1)
selection--;
break;
case SDLK_DOWN:
if (selection < 4)
selection++;
break;
}
break;
}
pthread_mutex_unlock(&mutex);
event.type = 0;
}


Voilà un code qui marche si je le place à la place du code précédent :

while(statut == 1)
{
for(int i=1 ; i<5 ; i++)
{
selection = i;
SDL_Delay(500);
}
}


Merci d'avance

1 réponse

XecK Messages postés 386 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 26 août 2016 54
21 janv. 2013 à 08:15
J'ai trouvé en fait, je n'avais juste pas initialisé la SDL dans mon programme principal :
SDL_Init(SDL_INIT_VIDEO);
2