Mutex avec la SDL pour communication main -> thread
Bonjour!
Dans la continuité de mon thread dans C++ > Language, je suis face a un programme qui ne bug pas, mais ne fait rien :D
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 :
Code:
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 CreateSDLUserEvent creer un SDL_Event, en mettant les valeurs code, data1 et data2 avec les 3 arguments et retourne le SDL_Event, simplement ^^
La fonction doGFX:
Code:
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 ^^
Code:
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;
} |
J'avais fait un test sans la fonction doGFX, simplement apres la creation de mon SDL_Event, et ca marchait bien :)
Donc en effet, je compile genialement bien, mais le programme fait rien :D