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 :

Appel d'une méthode d'un autre Thread


Sujet :

Threads & Processus C++

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 34
    Points : 24
    Points
    24
    Par défaut Appel d'une méthode d'un autre Thread
    Bonjour à tous.

    J'ai un petit soucis de Thread... Bon jusque là, j'ai appris en cours des choses simples avec les threads, mutex, semaphore, etc...

    Bon, sécuriser une variable de type primaire, Ok, ça marche sans soucis, ça bloquer pas, c'est synchro...

    Mais lors que maintenant on manipule des objets, qui ont un contexte...ça coince et je me mange des "Access Violation Reading Location" dans tous les sens.

    Je m'explique:

    Pour mon projet, j'ai deux Threads en gros, tous les deux font des boucles d'attente.

    Thread1: Scan Packet UDP contenant des coordonnées etc... (TUIO pour ceux qui connaissent)
    Thread2: Environnement 3D (ici ogre3d)

    mon Thread2 est un "listenner" de mon Thread1;

    Mon thread1 reçoit un info, notifie les listeners en invoquant une méthode update (je fais court)... soit mon Thread2, Ok le mécanisme marche très bien.

    Sauf que en fait, c'est mon Thread1 qui execute update, et donc y'a pas forcement tout le contexte de mon Thread2... (c'est pas la notion de Thread-safe ?)

    Alors ce que je veux, c'est que mon Thread1 notifie bien mon Thread2 mais que c'est mon thread2 qui execute l'update et non le thread1 comme c'est le cas.

    Bon, je sais pas si j'ai été assez clair...

    Si je dois clarifier...

    Merci d'avance pour vos réponses.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Il faut que ton thread2 implémente une file/pile de choses à faire.

    Le thread1 appelle thread2->Update() qui ajoute dans la pile (en le verrouillant au préalable) puis déverrouille la pile et notifie le thread2 (par un event) de repartir. Le thread2 repart pour lire la pile (en oubliant pas de verrouiller/déverrouiller car ta pile/liste doit être protégée des accès concurrents) et exécute la commande.

    A près la difficulté est de savoir à qui appartient la pile/file : thread1, thread2 ou bien objet plus global.

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 34
    Points : 24
    Points
    24
    Par défaut
    Merci pour ta réponse rapide.

    Donc en gros, la seule variable structure thread safe (avec les verrous qui vont bien) entre les deux threads est une file/pile ?

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Oui, c'est ce que j'ai envie de dire

    Après l'event utilisé par le thread2 comme objet de synchronisation/démarrage et positionné par le thread1 est par nature thread safe (sinon, c'est le bazar).

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 34
    Points : 24
    Points
    24
    Par défaut
    En tous cas merci...

    J'implémente ça et je teste.

Discussions similaires

  1. Appel d'une méthode static d'une autre classe
    Par Mooneer dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2008, 19h05
  2. Réponses: 12
    Dernier message: 07/11/2007, 00h53
  3. Appel d'une méthode à partir d'une autre page
    Par mona dans le forum ASP.NET
    Réponses: 9
    Dernier message: 15/09/2007, 23h52
  4. [POO] appel d'une méthode d'un autre fichier, le tout objet
    Par aaaaaaaa dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/07/2007, 18h43
  5. Appeler une méthode d'un autre servlet
    Par Mister Nono dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 28/09/2006, 23h09

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