IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Multithreading Discussion :

Plantage au déblocage des mutex


Sujet :

Multithreading

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Par défaut Plantage au déblocage des mutex
    Salut a tous,

    je cherche a threader un appli QGL et je ne connais rien au thread. Je cherche notamment a decoder un video et dans un même temps l'afficher en la sauvant dans un texture que je rafraichis.
    Bref jai besoin de threader mon appli qui rame un peu. Du coup
    je creer une thread qui vq decoder mon video, tandis que mon appli principale se charge de lafficher.
    Du coup j utilise QMutex pour bloquer l'acces a mes buffers images que mon thread remplis. Le probleme c est que quand je l'unlocke l'appli crashe.
    Au debug sous Visual c'est a ce moment la que ca crashe. Y aurait-il des suggestions?

  2. #2
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    Pourrais-tu fournir un peu de code stp? Je ne vois pas ce qui peut clocher.
    Si ça peut te donner des première pistes, j'utilise cette solution:
    > une collection d'images est stockée
    > il y un indice pour la lecture et un autre pour l'écriture (des itérateurs peuvent aussi faire l'affaire)
    > A la construction du thread l'indice de lecture est invalide (-1, mais c'est arbitraire) et celui de lecture au début du tableau.
    > Lorsque une image est disponible, j'incrémente les indices d'écriture et de lecture (en bouclant si nécessaire), et j'émets un signal (possible si tu utilises Qt4) ou un événement (pour Qt3/4)
    (> Ce signal aura prélablement connecté à un slot dans ton thread d'interface)
    > A réception du signal, le slot demande au thread l'image à afficher

    A noter:
    > La fonction fournissant l'image doit s'assurer que l'indice de lecture est valide
    > La fonction de décodage ne doit (après, il faut voir selon ton cas, si tu est prêt à rater des images, mais la manip des indices est autre) décoder/stocker une image que si l'indice d'écriture est différent de celui d'écriture, sinon, il attend.
    > Si tu utilises Qt4, ça implique d'avoir une boucle d'événement locale (pour les signaux/slots si tu utilises cette solution)


    A noter que je ne sais pas à quelle point cette méthode est robuste par contre. Je l'ai utilisé pour un petit apprentissage express au thread Qt et aux signaux/slots inter-thread

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Par défaut
    Salut,
    Merci pour ta reponse excuse moi mais j'étqis debordé aujourd'hui.
    Inserer du code ici serqit un peu fastidieux, mais je vais detailler :

    - je stocke une collection d'image : chacune a un index dans l'avi, un champ free qui precise si elle est lobre.

    je lance ma thread
    -elle recupere chaque frame de ma sequence
    - je recopie ces frames dans la premiere image de ma collection qui est libre.
    - je sette l'image comme non libre, et le bon index de l'image dans la sequence.


    Maintenant ma thread principale se charge de rendre via openGL, je me donne 3 frames de marge entre lecture et ecriture:
    - Je cherche dans ma collecetion l'image qui a le bon id et qui n est pas libre.
    - Je l affiche via OpenGL et je la sette comme non libre.

    Le probleme est que je sors de ma thread, l appli cation crashe quand j unlocke la image surlaquelle je viens d'ecrire. Newbie en thread je ne vois pas ou est le pb.

    Par contre je vais essayer ta solution, c est vrai que j ai limpression que tu synchronise lmieux l'appli ( par contre suis sur Qt 3 :-/)

    Merci
    @+

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/08/2009, 10h48
  2. Pratique d'utilisation des mutexes
    Par FabaCoeur dans le forum C
    Réponses: 4
    Dernier message: 29/01/2009, 15h08
  3. [Mutex] Comment faire des mutex non réentrants ?
    Par chronos dans le forum Windows
    Réponses: 11
    Dernier message: 08/02/2008, 11h51
  4. Utilisation des mutex et des threads
    Par Chen norris dans le forum SDL
    Réponses: 4
    Dernier message: 31/08/2007, 00h00
  5. Utilisation des Mutex
    Par jordy16 dans le forum C++Builder
    Réponses: 3
    Dernier message: 09/12/2004, 09h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo