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

Threads & Processus C++ Discussion :

[Multithreading] Problème de thread


Sujet :

Threads & Processus C++

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut [Multithreading] Problème de thread
    Hello,

    J'ai un problème avec les threads. Je n'ai pas une grande expérience de ces bêtes, alors si vous avez des idées qui vous semblent stupides, n'hésitez pas.

    Je code un plug-in, dans lequel je peux définir une fonction de callback appelée lorsque se produisent certains événements signalés par l'application hôte.

    Dans cette fonction de callback se trouvant dans une classe, je crée à l'aide d'une API externe (non liée à l'application hôte) un thread, qui appelle une autre fonction de cette classe. Cette dernière fonction crée également des threads.

    Appellons A la fonction de callback, et B la fonction appelée par A.

    Nous avons : événement -> A -> B

    Le traitement effectué par A, et surtout par B, peut être assez long.
    Pendant ce laps de temps peuvent survenir de nouveaux événements. Je souhaite que dans ce cas, tout soit arrêté, et que l'appel à la fonction de callback initie un nouveau traitement.

    Pour l'instant, si j'attends que le 1er traitement se termine, cela fonctionne.
    Mais si j'ai le malheur de déclencher un événement alors qu'un traitement est toujours en cours, ça plante méchamment. Je n'arrive même pas dans la fonction de callback. La pile des appels de fonction ne me donne aucune info valable.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Difficile de répondre avec ces informations un peu trop générales. As-tu des mécanismes de synchronisations et de contrôle de concurrence d'accès (mutex, sections critiques). Peut-être ton problème est tout simplement un problème de réentrance?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Ben comme je n'entre même pas dans la fonction de callback, la question des mécanismes de synchronisation ne se pose même pas (encore).

    Pour la réentrance, tu suggères que l'application hôte de cette fonction de callback n'a pas fait en sorte que cette dernière soit réentrante ?

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    C'est pas très clair. Peux tu préciser si c'est bien ça le séquencement:
    1/Application hôte: trap l'évènement et appelle la cb A de ton plugin
    2/ A crée un thread et appelle B
    3/ B crée un thread.
    Bis: nouvel évènement.
    1/Application hôte: trap l'évènement et appelle la cb de A et là
    C'est ça?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    C'est exactement ça.

    Je précise que la fonction de création de thread prend comme argument un pointeur de fonction, qui se trouve être une fonction membre de la classe.
    Le handler retourné est conservé comme une donnée membre.

    Lorsque j'entre dans le callback, je teste si ce handler est null.
    S'il ne l'est pas, je tue le thred.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Je suis arrivé à me mettre dans une configuration dans laquelle je peux rentrer dans le callback. Mettez vos cerveaux en pause le temps que je cherche par moi-même le problème, maintenant que j'ai un peu plus de billes pour déboguer. :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Multithreading] Problème de thread
    Par oodini dans le forum C++
    Réponses: 5
    Dernier message: 04/11/2008, 12h13
  2. [VB.NET] Problème de Thread
    Par Sadneth dans le forum ASP.NET
    Réponses: 26
    Dernier message: 31/01/2006, 10h12
  3. Problème synchronisation threads
    Par Linio dans le forum Concurrence et multi-thread
    Réponses: 19
    Dernier message: 11/01/2006, 16h57
  4. [MFC] Problème de Threads + Timers
    Par Invité dans le forum MFC
    Réponses: 8
    Dernier message: 30/11/2005, 10h51
  5. [VC++6][DX9] Problème de thread lors d'un blit ...
    Par grandjouff dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2003, 22h22

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