Je me suis mis aux threads avec la SDL en suivant la FAQ de developpez.com. J'ai une classe qui gère l'intégralité du fonctionnement de mon application, et dont le rôle est de lancer des threads :
En parallèle, il y a 2 classes (THREAD_ECRAN et THREAD_CLAVIER) qui contiennent chacune une fonction statique pour le déroulement du thread.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 threadClavier = SDL_CreateThread(&THREAD_CLAVIER::foncThreadClavier, &clavier); threadEcran = SDL_CreateThread(&THREAD_ECRAN::foncThreadEcran, &ecran); // Attente de la fin des threads SDL_WaitThread(threadClavier, NULL); SDL_WaitThread(threadEcran, NULL);
THREAD_ECRAN.cpp
THREAD_CLAVIER.cpp
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 class THREAD_ECRAN { public: static int foncThreadEcran(void *data) { // Conversion du paramètre en type ECRAN ECRAN *ecran = (ECRAN*)data; bool erreur; erreur = ecran->afficher(); while(!erreur) { // rien ici pour l'instant... } return 0; } };
Bien entendu, mes classes ECRAN et CLAVIER ont bien été écrites et testées : aucun problème de ce côté-là.
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 class THREAD_CLAVIER { public: static int foncThreadClavier(void *data) { // Conversion du paramètre en type CLAVIER CLAVIER *clavier = (CLAVIER*)data; SDL_Event event; string fonctionLancee; bool continuer = true; while (continuer) { SDL_WaitEvent(&event); switch(event.type) { case SDL_KEYDOWN : fonctionLancee = clavier->action(event.key.keysym.sym); continuer = false; break; case SDL_QUIT : continuer = false; } } MessageBox (NULL, "Thread clavier quitté", "Info", MB_OK | MB_ICONINFORMATION); return 0; } };
Mon problème est le suivant : l'écran fonctionne très bien, mais le clavier ne semble pas recevoir d'événement puisque quelle que soit la touche clavier pressée, aucun message d'information n'apparaît (la ligne MessageBox de THREAD_CLAVIER.cpp n'est donc pas atteinte).
Je me suis demandé si ça venait de l'utilisation de SDL_WaitEvent, mais même en utilisant SDL_Poll_event, aucun événement clavier ne semble intercepté.
Une idée ?
PS : je travaille sous Dev C++ 4.9.9.2.
Partager