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

VB.NET Discussion :

Communication inter processus [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Apprenti développeur
    Inscrit en
    Février 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 102
    Points : 58
    Points
    58
    Par défaut Communication inter processus
    Bonjour,

    Je rencontre un problème, mais avant tout, voici ce que je veux faire :

    J'ai un programme A qui tourne en permanence et qui ne doit jamais s'arrêter. Ce programme se lance au démarrage.

    Vient ensuite le programme B qui se lance manuellement, et tant que le programme B tourne, le programme A s'arrête temporairement.

    Pour celà, j'avais d'abord pensé à un fichier .ini commun aux deux programmes A et B. Dans ce fichier ini, je mets une valeur booleenne.

    False : le programme A tourne
    True : le programme A se met en pause

    Quand le programme B s'ouvre (en manuel), le booleen passe à True. Quand il se ferme, le booleen passe à False.

    Seulement le problème, c'est que A lit en permanance le fichier .ini, ce qui provoque un conflit lorsque le programme B veut ecrire dedans, car un fichier ne peut être ouvert que par un seul programme à la fois.

    Ensuite, un ami m'a parlé de 'pipe' ou 'canal nommé'. Est-ce la bonne methode? Que me conseillez vous pour y arriver?

    Merci

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Tu peux passer par d'autre solution.

    Mais sur ton problème initiale, A doit faire le test de lecture tous les x secondes (5 par exemple) avec un sleep ou un DoEvents, et il fait un test pour savoir si il peut lire le fichier (avec un try catch), sinon il attends, comme ça pas d'exception.

    B de même, vérifie si le fichier est ok
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    passer par la lecture d'un fichier n'est pas une bonne idée
    si un programme plante il n'aura pas le temps d'écrire une valeur dans le fichier

    le plus simple c'est d'utiliser le tcplistner/tcpclient
    B écoute sur un port (sur localhost)
    A essaye de s'y connecter toutes les x secondes s'il n'y arrive pas il tourne, s'il y arrive il se met en pause
    c'est pas encore ce qu'il y a de plus joli mais c'est déjà plus sûr

    ca reflèterait plutot un problème de conception à mon avis
    si ces programmes font la même chose un seul devrait faire ce qu'il y a à faire et B devrait juste dire à A quoi faire (auquel cas A devrait être un service)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    passer par la lecture d'un fichier n'est pas une bonne idée
    En effet, modifier/tester le contenu n'est en effet pas une bonne idée.

    Mais, on peut utiliser la solution suivante:
    - B exécutera les fonctions Lock et Unlock des FileStream pour signaler son état (Unlock auto en cas de crash de B).
    - A effectuera des lectures pour connaitre l'état Locked ou UnLocked (une exception sur le Read impliquant "Locked"),
    - au départ, B effectuera le même test que A pour savoir si une instance de B est déjà active.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    Membre du Club
    Homme Profil pro
    Apprenti développeur
    Inscrit en
    Février 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    J'ai finalement réussi, j'ai utilisé un pipe et me suis inspiré de ce que Pol a dit :

    B ecoute si client A se connecte.

    A essaye de se connecter grâce à un Thread.

    Je fais une vérification : Tant que A est connecté, boucle infinie, et on libère le port série pour B. Quand B se ferme : Disconnect(), et pouf, A reprend le fil d'exécution.

    Merci beaucoup !

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

Discussions similaires

  1. Communication inter-processus et pause()
    Par jsebfranck dans le forum POSIX
    Réponses: 10
    Dernier message: 14/02/2008, 14h52
  2. [windows] Communication inter-processus
    Par litbos dans le forum Windows
    Réponses: 6
    Dernier message: 16/01/2007, 09h13
  3. [Perl] communication Inter-Processus
    Par MarneusCalgarXP dans le forum Langage
    Réponses: 15
    Dernier message: 14/08/2006, 22h43
  4. [débutant] Communication inter-processus
    Par tooney dans le forum C
    Réponses: 3
    Dernier message: 29/12/2005, 20h48
  5. communication inter-processus
    Par benoit70 dans le forum MFC
    Réponses: 1
    Dernier message: 14/04/2005, 09h55

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