Recv et boucle en SDL

Recv et boucle en SDL - C++ - Programmation

Marsh Posté le 01-06-2004 à 10:08:44    

J'ai un bout de programme qui utilise SDL avec un écouteur sur la souris.
Mon problème c'est que j'ai une boucle infinie sur un recv pour reçvoir des messages du réseau.
Or cette boucle fait planter mon programme. Par contre si j'ajoute un écouteur de souris après la récéption d'un message et que je quitte cet écouteur pour revenir à ma boucle après un clic, là ça ne plante plus  :??:  
Je vois pas comment m'en sortir :(

Reply

Marsh Posté le 01-06-2004 à 10:08:44   

Reply

Marsh Posté le 01-06-2004 à 12:02:04    

attends j'esayes de me faire une représentation mentale de ton code...

Reply

Marsh Posté le 01-06-2004 à 12:14:25    

:pt1cable:    :whistle:

Reply

Marsh Posté le 01-06-2004 à 16:52:25    

pardon c'est vrai que chui pas très clair sur ce coup là!
voilà en gros ce que j'ai...
 

Code :
  1. sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  2.    bind(sock,(SOCKADDR*)&sin,sizeof(sin));
  3.   if(connect(sock,(SOCKADDR*)&sin,sizeof(sin)))
  4.     {
  5.         drawString(sdlMainScreen,font1,40,350, "La connexion a echoue!" );
  6.     SDL_Flip(sdlMainScreen);
  7.     Sleep(2000);
  8.         exit(0);
  9.     }
  10.   SDL_BlitSurface(mainscr,NULL,sdlMainScreen,NULL);
  11.   infoline("Connexion effectuee" );
  12. char retour[1000][100];
  13. int a=0;
  14. while(0)
  15. {
  16. if(recv(sock,buffer,sizeof(buffer),0))
  17. {
  18.     itoa(a,convert,10);
  19.     infoline(convert);
  20.     a++;
  21. int quitboucle=0;
  22. while(quitboucle==0)
  23. {    SDL_Event event;
  24.         while (SDL_PollEvent (&event))
  25.         {
  26.             switch (event.type)
  27.             {
  28.                
  29.              case SDL_MOUSEBUTTONDOWN: {
  30.                  if (event.button.button==1)
  31.                               { infoline("clic" ); Sleep(1000); char buffer[1000]; quitboucle=1;}
  32.                  break;
  33.                  }
  34.              }
  35.         }
  36. }
  37. }


Message édité par toutoune le 01-06-2004 à 16:56:28
Reply

Marsh Posté le 01-06-2004 à 17:38:58    

je suppose que le premier while(0) est à ignorer...
 
bon ton recv est bloquant.
soit tu le passes en non-bloquant, soit tu le mets dans un thread.

Reply

Marsh Posté le 01-06-2004 à 17:46:34    

Reply

Marsh Posté le 01-06-2004 à 21:56:07    

oui mais bloquant ou non, ce que je ne comprend pas c'est qu'il fasse planter l'interface en SDL! Parce que sans SDL, en ligne de commande dans la console MS DOS, ça passe!

Reply

Marsh Posté le 02-06-2004 à 23:05:15    

ok merci, avec les threads ça passe!

Reply

Marsh Posté le 03-06-2004 à 19:06:36    

attention à ta synchronisation entre tes threads !!!

Reply

Marsh Posté le 03-06-2004 à 19:14:27    

c'est à dire?

Reply

Marsh Posté le 03-06-2004 à 19:14:27   

Reply

Marsh Posté le 03-06-2004 à 19:16:20    

bin suivant comment tu as architecturé ton code au niveau des variables qui sont alterées par le thread de réception, tu peux avoir des plantages si tu utilises pas des sémaphores.


Message édité par bjone le 03-06-2004 à 19:17:16
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed