Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1665 connectés 

  FORUM HardWare.fr
  Programmation
  C

  SDL et multithread

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SDL et multithread

n°902677
xilebo
noone
Posté le 19-11-2004 à 11:30:34  profilanswer
 

Salut,
 
 
J'ai une application multithread sous linux qui utilise actuellement la bibliotheque X11, et afin de rendre mon programme compatible windows (mais aussi pour avoir quelques fonctionnalités supplémentaires comme le double buffering et la gestion de la transparence), j'ai décidé de changer ma couche graphique et d'utiliser la libSDL.
 
Seulement j'ai quelques soucis au niveau du dessin. En effet, j'ai plusieurs threads qui doivent dessiner. Par exemple le thread principal lorsqu'on appuie sur une touche, mais j'ai egalement un thread de reception de trame sur un port serie et selon le message recu, je peux avoir à redessiner à partir de ce thread de reception.
 
Sous X , pour eviter les acces concurrentiels au display, j'utilisais les fonctions XLockDisplay/XUnlockDisplay lors de toute opération de dessin, et ca se passait tres bien.
 
Je suis passé a SDL, et je n'ai plus acces a ce genre de fonction, et il m'est impossible de faire un SDL_LockSurface sur l'ecran principal (comme ecrit dans la doc). Du coup, dans certains cas, l'application ne peut plus fonctionner. ex : je touche a l ecran pour changer de page, a ce moment la, une trame arrive pour mettre a jour un texte : 2 threads differents font appel a la fonction SDL_BlitSurface, et ca me ressort parfois une erreur du type :
 
Xlib : unexpected async reply.
 
J'ai tenté d'utiliser les sémaphores afin de resoudre le probleme mais apparemment ca n'arrange pas le probleme (il faut dire que je ne maitrise pas le sujet non plus).
 
Y a-t-il un moyen de resoudre ce probleme ? ou alors faut-il que je passe toutes mes operations de dessin dans le thread principal ? (chose qui me parait impossible)
 
 
merci :)

mood
Publicité
Posté le 19-11-2004 à 11:30:34  profilanswer
 

n°902692
Nico5779
Posté le 19-11-2004 à 11:45:44  profilanswer
 

tu peux faire un système de file d'attente.

n°902694
el muchach​o
Comfortably Numb
Posté le 19-11-2004 à 11:46:39  profilanswer
 

Y'a déjà eu un topic la-dessus il me semble.

n°902705
xilebo
noone
Posté le 19-11-2004 à 11:58:37  profilanswer
 

je viens d effectuer une recherche sur tous les topic SDL, et il n'y a rien qui puisse m'aider :(

n°902736
Taz
bisounours-codeur
Posté le 19-11-2004 à 12:25:59  profilanswer
 

c'est threadsafe SDL ? parce que dans GTK, faut pas s'amuser a faire trop de conneries dans differents thread, sinon, on se bouffe le meme genre d'erreur X

n°902769
xilebo
noone
Posté le 19-11-2004 à 13:37:47  profilanswer
 

La documentation est assez imprécise à ce niveau, mais je sens que je vais devoir transformer toute mon application, ou alors trouver une bibliotheque plus adequate mais egalement compatible sous windows (j'en doute).

n°902803
blurk
Posté le 19-11-2004 à 14:45:34  profilanswer
 

Tu peux peut-être t'en sortir en utilisant les sémaphores (fonctions SDL_Sem*).
 
Exemple tiré de la doc :

Code :
  1. if (SDL_SemWait(my_sem) == -1) {
  2.     return WAIT_FAILED;
  3. }
  4. ...
  5. SDL_SemPost(my_sem);


 
Ça suspend le thread tant que la sémaphore est pas libérée.

n°902928
xilebo
noone
Posté le 19-11-2004 à 16:15:55  profilanswer
 

oui j'ai utilisé ca en initialisant ma sémaphore a 1. Mais apparemment ca ne change rien. Peut etre dois-je en deduire que le probleme vient d'ailleurs.
 
 
Eureka !!! merci, en ecrivant mon post, je viens de m'apercevoir que je n'avais non pas 1 fonction de dessin , mais 2. (une pour les images, et une pour le texte). J'avais mis la semaphore uniquement pour le dessin de mes images , et forcement ca plantait quand du texte etait dessiné , et j'ai pas fait le rapprochement.  
 
 
Bon je reteste ca  :D

n°902934
xilebo
noone
Posté le 19-11-2004 à 16:25:44  profilanswer
 

bon comme prévu, ca marche maintenant. Merci :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  SDL et multithread

 

Sujets relatifs
Quelle SDL Image pour Devc++SDL_Image pour Devc++
SDL et DEVC++[SDL]Sprites => tutoriel simple
[SDL]SDL_Rect.w =SDL_Surface->w; => Non affichage ![SDL] je pert le focus ...
[C++/SDL] pb de threading[SDL/GTK] keycodes différents
[SDL]N'agit pas bien quand j'utilise le clavierADA et SDL : comment configurer
Plus de sujets relatifs à : SDL et multithread


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)