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

C# Discussion :

Communication entre deux threads


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 107
    Points : 43
    Points
    43
    Par défaut Communication entre deux threads
    bonjour,

    mon programme exécute un thread qui génère des chiffres.

    savez vous comment récupérer les chiffres qu'il génère a partir d'une autre classe ?

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Tu stockes les données calculées par ton thread dans un objet type Collection/List/etc .... en prenant soin de synchroniser par un lock l'écriture et la lecture de la collection/list/etc .....

    Typiquement, si tu veux consommer au fur et à mesure que ton thread calcul, tu peux utiliser un objet Queue :

    - ton thread de calcull met en Queue ses calculs.
    - ton thread consommateur les de-queue au fur et à mesure.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 107
    Points : 43
    Points
    43
    Par défaut
    J'ai une classe qui simule un serveur et qui génère des nombre aléatoires.
    de l'autre coté j'ai une classe qui doit récupérer ces données.

    Ce que je ne comprend pas c'est que dans ma classe qui doit récupérer les données je doit forcement faire un appel au serveur et dans ce cas un deuxième thread est lancé .....

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Essaye d'énoncer ta demande plus clairement, car je ne comprends pas où est ton problème.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 107
    Points : 43
    Points
    43
    Par défaut
    J'ai un classe WorkerServer qui lance un thread qui calcul un nombre aléatoire.

    Et j'ai une autre classe Module qui doit récupérer ces nombres.

    Comment je dois procéder dans la classe Module ?

    Pour le moment j'instancie un new WorkerServer pour récupérer le nombre mais cela ne marche ....

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Je t'ai pourtant fourni la réponse au dessus (une possibilité, il y en a bien sur beaucoup d'autres) : utilise une instance d'un objet Queue alimentée par ton générateur et lue par ton consommateur.

    Qu'est ce qui te semble difficile ici ?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Tiens, un exemple torché en 2 mn d'un objet qui une fois instancié génére des nombres aléatoires, les mets dans un objet Queue<int> qui est lue par le consommateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    static void Main(string[] args)
    {
    Queue<int> _queue = new Queue<int>();
    RandomGenerator gen = new RandomGenerator(_queue);
    while(true)
    {
    int? v = null;
    lock(_queue)
    {
    if(_queue.Count > 0)
    {
    v = _queue.Dequeue();
    }
    }
    if (v != null)
    {
    Console.WriteLine((int)v);
    }
    }
    }
    private class RandomGenerator
    {
    private Queue<int> _queue;
    private Random _rnd = new Random();
    public RandomGenerator(Queue<int> queue)
    {
    _queue = queue;
    Thread thread = new Thread(generate);
    thread.Start();
    }
    private void generate()
    {
    while (true)
    {
    Thread.Sleep(20);
    int v = _rnd.Next();
    lock (_queue)
    {
    _queue.Enqueue(v);
    }
    }
    }
    }

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  8. #8
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 107
    Points : 43
    Points
    43
    Par défaut
    Je suis d'accord mais la c'est le consommateur qui instancie l'objet.

    Mais comment faire quand l'objet qui calcul les nombres aléatoires et le consommateur sont lancés dans deux programmes différents ?
    Je veux dire avec deux main ....

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    C'est quand même bizarre de poser une question sur un problème (communicaton inter-thread) pour dire, une fois que tu as la solution que en réalité, le problème n'est pas la communicaton inter-thread mais la communication interapplication.

    On pourrait presque penser que tu te payes un peu notre tête.

    Bon, passons.

    Dans ce cas, utilise WCF pour communiquer entre les deux applications.
    il y a d'autres méthodes mais c'est ou plus restreint ou/et plus compliqué :

    - Mémoire partagé (suppose que les deux applis soient sur la même machine).

    - NamedPipe : plus compliqué à utiliser que WCF

    - Remoting : daté et plus compliqué à utiliser que WCF

    etc ..... (et bien sir je passe sur les technos franchement datées comme les MailSlots - si ça existe encore ? - , le RPC, etc ....)

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  10. #10
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 107
    Points : 43
    Points
    43
    Par défaut
    Non mais, dans un programme ce n'est pas possible de créer deux "sous programme" qui se lance en même temps ?

    Un qui génère, l'autre qui récupère ou écoute.

    En gros un Thread pour chaque "sous programme" avec le Thread qui écoute qui stock ce qu'il "entends"

    Parce que dans ton programme c'est le consommateur qui lance le Thread du générateur.

    Moi ce que je cherche c'est que personne n'ai besoin de lancer le Thread du générateur.

  11. #11
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par floriaan60 Voir le message
    Non mais, dans un programme ce n'est pas possible de créer deux "sous programme" qui se lance en même temps ?
    Bon, moi je laisse tomber, car tu refuses d'exposer ton besoin clairement.

    Tu changes de version d'un message à l'autre. je te cite :

    Mais comment faire quand l'objet qui calcul les nombres aléatoires et le consommateur sont lancés dans deux programmes différents
    Terminé pour ma part.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

Discussions similaires

  1. Communication entre deux threads
    Par cyberspy2999 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 03/03/2011, 16h12
  2. Communication entre deux Executables ?
    Par QAYS dans le forum Langage
    Réponses: 8
    Dernier message: 11/05/2005, 14h41
  3. communication entre deux executables
    Par semenzato dans le forum MFC
    Réponses: 8
    Dernier message: 13/04/2005, 22h19
  4. Communication entre deux Threads
    Par rvzip64 dans le forum Langage
    Réponses: 13
    Dernier message: 28/01/2005, 09h14
  5. Réponses: 5
    Dernier message: 25/03/2003, 19h43

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