SDL et multithread - C - Programmation
Marsh Posté le 19-11-2004 à 11:58:37
je viens d effectuer une recherche sur tous les topic SDL, et il n'y a rien qui puisse m'aider
Marsh Posté le 19-11-2004 à 12:25:59
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
Marsh Posté le 19-11-2004 à 13:37:47
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).
Marsh Posté le 19-11-2004 à 14:45:34
Tu peux peut-être t'en sortir en utilisant les sémaphores (fonctions SDL_Sem*).
Exemple tiré de la doc :
Code :
|
Ça suspend le thread tant que la sémaphore est pas libérée.
Marsh Posté le 19-11-2004 à 16:15:55
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
Marsh Posté le 19-11-2004 à 11:30:34
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