Interactions de l'utilisateur et threads avec <pthread.h>
Résolu
XecK
Messages postés
386
Date d'inscription
Statut
Membre
Dernière intervention
-
XecK Messages postés 386 Date d'inscription Statut Membre Dernière intervention -
XecK Messages postés 386 Date d'inscription Statut Membre Dernière intervention -
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>
- Vous avez utilisé ce numéro de téléphone à de trop nombreuses reprises - Forum Gmail
- Changer nom utilisateur windows 10 - Guide
- Votre code de réponse d’utilisateur nocaptcha manque ou est invalide. - Forum Réseaux sociaux
- Utilisateur facebook - Forum Facebook
- Utilisateur Facebook ✓ - Forum Facebook Messenger