Interactions de l'utilisateur et threads avec <pthread.h>
Résolu
XecK
Messages postés
405
Statut
Membre
-
XecK Messages postés 405 Statut Membre -
XecK Messages postés 405 Statut Membre -
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
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
A voir également:
- Interactions de l'utilisateur et threads avec <pthread.h>
- Utilisateur facebook ✓ - Forum Facebook Messenger
- Changer nom utilisateur windows 10 - Guide
- Impossible d'utiliser ce numéro de téléphone pour la validation. - Forum Gmail
- Idée nom d'utilisateur snapchat - Guide
- Utilisateur indisponible messenger - Guide