Bonjour!
Dans la continuité de mon thread dans C++ > Language, je suis face a un programme qui ne bug pas, mais ne fait rien
Le but de ce programme:
J'essaye de faire en sorte que je puisse envoyer des SDL_Event à un thread qui se chargera uniquement de faire le travail graphique ^^
Voila l'envoi de l'event :
La fonction CreateSDLUserEvent creer un SDL_Event, en mettant les valeurs code, data1 et data2 avec les 3 arguments et retourne le SDL_Event, simplement ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void Window::prout() { SDL_Event ue; int a; int b; for(int i=0; i < 20; ++i) { a = i+99; b = i*7; ue = CreateSDLUserEvent(0x01, a, b); Threads::getInstance()->doGFX(ue); } }
La fonction doGFX:
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 void Threads::doGFX(SDL_Event ue) { int val; SDL_LockMutex(_guiEventLock); _buf = &ue; while ((-1 == (val = SDL_PushEvent(_buf)))) { SDL_CondWait(_guiEventWait, _guiEventLock); } SDL_UnlockMutex(_guiEventLock); SDL_CondSignal(_guiEventWait); };
Et mon thread recupere le event ^^
J'avais fait un test sans la fonction doGFX, simplement apres la creation de mon SDL_Event, et ca marchait bien
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
26
27
28
29
30
31
32
33
34 static int GUIThread(void *nothing) { SDL_Event ue; int order; int arg1, arg2; char *pp; while(WaitEvent(&ue, Threads::GUIEventWait(), Threads::GUIEventLock())) { if(ue.type == SDL_USEREVENT) { MessageBox(NULL, "trigger event", "ok", MB_OK); order = (int)ue.user.code; arg1 = (int)ue.user.data1; arg2 = (int)ue.user.data2; sprintf(pp, "order=%d; arg1=%d; arg2=%d", (int)order, (int)arg1, (int)arg2); if(order == T_ORDER_LOADMAP) { MessageBox(NULL, pp, "gfx thread (load MAP ORDER !)", MB_OK); } else if(order == T_ORDER_FADE) { } else if(order == T_ORDER_SCREEN) { } } } return 0; }
Donc en effet, je compile genialement bien, mais le programme fait rien![]()
Partager