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 