none
Communication entre 2 threads RRS feed

  • Question

  • Bonjours,

    Je souhaiterais faire communiquer 2 threads entre eux, un thread de fond et la partie graphique de mon application. La partie graphique de mon application doit envoyer des commandes au thread de fond et le thread de fond doit pouvoir remonter des informations à la partie graphique.

    Est ce quelqu'un aurait une idée??

    Cordialement.

    mercredi 18 août 2010 12:22

Réponses

  • Bonjour,

    Dans ce cas, il vous faut 4 threads :

    • un dans l'application graphique pour gérer l'affichage des données (c'est le thread principal Windows qui est crée au lancement de votre application)
    • un dans l'application graphique qui lit les données provenant de l'application console
    • un dans l'application console qui lit les données provenant de l'application IHM (le thread principal de préférence)
    • un dans l'application console qui envoi les données vers l'application graphique.

    Au niveau de l'application console, un seul thread peut suffir si votre application répond de manière synchrone (attend une demande, traite la demande et donne une réponse à l'IHM... Et cela de manière cyclique).

    Cette communication entre les deux applications ne peut se faire (et le plus simplement) avec des tubes nommés.

    Au niveau de .NET voici les classes à utiliser : http://msdn.microsoft.com/en-us/library/system.io.pipes.aspx

    Au niveau de Win32 : http://msdn.microsoft.com/en-us/library/aa365152(VS.85).aspx

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse delje14 jeudi 19 août 2010 14:40
    jeudi 19 août 2010 12:10
    Modérateur

Toutes les réponses

  • Bonjour,

    Quelle technologie utilisez vous ? .NET ? MFC ?

    De manière générale (et le plus simplement possible), la communication entre threads consiste à utiliser des variables qui sont accessibles par les deux threads.

    Par exemple : Votre thread de fond écrit une données dans une variable et votre thread d'affichage affiche cette donnée.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 18 août 2010 18:34
    Modérateur
  • J'utilise du .net pour la partie graphique et mon thread de fond est issue d'un code Win32

    Cordialement

    jeudi 19 août 2010 07:08
  • Bonjour,

    Pouvez-vous nous confirmer que vous avez 2 processus différents, et vous voulez les faire communiquer tous les deux ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    jeudi 19 août 2010 08:11
    Modérateur
  • Bonjour,

    En fait je doit apposer un Interface utilisateur a une application console. Pour ce faire, j'ai créer une solution .net dans lequel j'ai importé les fichiers .c, .cpp et .h de l'application console Win32( donc pas compiler en CLR).

    Mon idée était d'avoir un thread gérant la partie graphique et un thread gérant l'ex appli console.

    Je souhaiterais donc faire une interface entre pour envoyer des commandes de la partie graphique vers la partie Win32 et inversement recevoir des info de la partie Win32 vers la partie graphique.

    Je cherche donc comment faire dialoguer ces 2 parties.

    Cordialement.

    jeudi 19 août 2010 11:46
  • Bonjour,

    Dans ce cas, il vous faut 4 threads :

    • un dans l'application graphique pour gérer l'affichage des données (c'est le thread principal Windows qui est crée au lancement de votre application)
    • un dans l'application graphique qui lit les données provenant de l'application console
    • un dans l'application console qui lit les données provenant de l'application IHM (le thread principal de préférence)
    • un dans l'application console qui envoi les données vers l'application graphique.

    Au niveau de l'application console, un seul thread peut suffir si votre application répond de manière synchrone (attend une demande, traite la demande et donne une réponse à l'IHM... Et cela de manière cyclique).

    Cette communication entre les deux applications ne peut se faire (et le plus simplement) avec des tubes nommés.

    Au niveau de .NET voici les classes à utiliser : http://msdn.microsoft.com/en-us/library/system.io.pipes.aspx

    Au niveau de Win32 : http://msdn.microsoft.com/en-us/library/aa365152(VS.85).aspx

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse delje14 jeudi 19 août 2010 14:40
    jeudi 19 août 2010 12:10
    Modérateur