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 :

Crée un événement depuis un thread pour prévenir un autre


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut Crée un événement depuis un thread pour prévenir un autre
    Bonjour.

    Nous somme plusieurs à travailler sur un projet (étudiant 2eme année IRIS, j'ai 39 ans et les élèves env 20 ans). L'un de mes collègues s'occupe de la gestion du systèmes, il me crée dans un autre thread (l'IHM). Je paramètre mon IHM puis l'utilisateur indique ce qu'il veut ou pas (C'est pour faire de l'acquisition de données sur un modules de supervision, un automate pour faire simple).

    Pour que la Gestion sache dans quelle état je suis, il est prévu que je remplisse un tableau de booléen qu'il viens scruter en permanence.

    je voudrais savoir si c'est possible de provoquer un événement pour le thread Gestion à partir du thread IHM afin que celui-ci sache que j'ai quelque chose à lui demander et du coup il récupère mon tableau de booléen. Afin d'éviter qu'il me scan en permanence même si par sécurité il peut y avoir un scan moins fréquent.

    Si vous avez des idées pour me guider
    Actuellement, il est donc prévu qu'il récupère le tableau de booléen puis en fonction de se que j'ai rempli il viens de nouveau me chercher les infos qu'il à besoin pour faire ce que je lui est demandé.

    Plusieurs méthode Get... sont prévu.
    GetEtatIHM
    GetReference
    GetDictionnaire
    GetParmCom
    etc...

    Ainsi que quelques méthode pour qu'il puisse me redonner ce que je lui est demandé.

    SetMesure
    SetListeFichierSGBD
    SetListeFichierCSV
    etc...

    Cette forme de programmation à été plus ou moins décidé par les profs (2) Il sont d'ailler pas trop d'accort tous les 2 sur se sujet.

    Pour le moment je regarde comment se passer des paramètres entre thread et cela me semble bien compliqué par rapport à notre vision des choses avec nos méthodes Get... et Set...

    Merci de me faire savoir si l'idée prise est la bonne ou si il y a d'autre façon de faire que de s'appeler des méthodes pour l'échange.

    Lorsque je vais attendre qu'il me revoie les données que j'ai besoin aussi de savoir lorsque je les ai reçus.

    C'est encore un peut flou pour moi cette partie entre les threads

    Merci de votre aide

  2. #2
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Pour le passage de données d'un thread à l'autre l'un de mes collègues (je suis en stage dans mon entreprise, vacance oblige), m'a conseillé de passer par des variables global à protéger en accès.

    Mais je trouve toujours pas comment crée un évènement pour prévenir chaque thread qu'il a quelques chose à faire car son information est disponible...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 114
    Par défaut
    Bonjour,

    Peut importe le langage, une donnée qui doit être utilisée en lecture et écriture par différent thread doit être protégée pour éviter les ennuis.
    Ensuite, plutot qu'utiliser des get/set, .NET met à ta disposition des propriétés qui permet une meilleure lisibilité du code.
    Pour ce qui est de ton histoire d'évènement, tu peux voir pour implémenter le pattern Observer, ou alors tout simplement utiliser les délégates et les évènements (mot clef event)

  4. #4
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Merci

  5. #5
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Bonjour à tous, de retour au lycée, mon projet est reparti.

    Je m'attaque maintenant à la partie: Création d' évènements entre tread que j'avais laissé un peut de coté.

    Pour ce qui est des variables que je manipulais préalablement avec des méthodes get... et set...
    Mon maitre de stage m'a dit qu'il fallait pas que je me fasse chi.... mais que je mettent des variables globale, simplement protéger par des sémaphores.

    Par contre maintenant je voudrais bien que mes 2 threads puissent savoir quand ils ont quelque chose à faire.


    Déroulement:
    j'ai donc un thread principal et un thread de WinForm.
    le thread principal crée le thread Winform

    Entre les 2 j'ai des variables accessibles au 2, protégées par des sémaphores.

    Le thread de la Form se paramètre grâce à un fichier XML et ce que l'utilisateur sélectionne.
    Une fois que le paramétrage est fait, l'utilisateur attend donc le traitement. et c'est la que je voudrais prévenir le Thread principal qu'il y a quelque chose à faire.

    Une fois prévenu le Thread principal devra aller récupérer le tableau de booléen (Le tableau contient donc toutes les actions possible, et indique si le nom du fichier est renseigné, s'il faut faire juste une acquisition de données unique ou lancer véritablement l'acquisition, s'il faut faire une sauvegarde ou pas etc..) et faire le traitement en conséquence, éventuellement modifier des variables global. Une fois fait il devra à son tours prévenir que les données sont prête au thread Form.

    En imaginant que l'on lance une acquisition longue, toutes les X secondes le thread principal va m'envoyer les nouvelles données puis prévenir que des données sont prête au thread Form pour qu'il récupère ces données et mette à jour les courbes.

    Voila.

    j'ai commencer a regarder les "EVENTHANDLERS" mais j'arrive pas vraiment a trouver ce qu'il faut faire.

    Apparemment il faudrait que je crée 2 autre classes héritant de EventArgs .

    Mais j'arrive pas a voir quoi faire, comment déclencher cette événement.

    Pourrier vous le donner quelques conseils et exemple ou un bonne exemple avec fichiers source que je pourrait faire tourner pour comprendre le principe.

    J'avoue que sa n'a pas l'air si compliquer mais je comprend pas...

    Merci de votre aide

  6. #6
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Attention : events et thread n'ont rien à voir entre eux.

    Un event, c'est juste une collection de pointeurs de méthodes. Ça permet à un objet émetteur d'exécuter le code d'objets abonnés. Mais c'est entièrement synchrone.

    Dans ton cas : comme tu le sais déjà, seul le thread de l'UI peut modifier les contrôles d'une fenêtre. C'est pourquoi l'objet Form a une méthode Invoke, à laquelle tu peux passer une méthode en paramètre, qui sera exécutée dans le thread de l'UI ; cette méthode pourra donc se charger de mettre à jour ton graphe.

    A noter tout de même que cette façon de faire est spécifique au développement d'UI, puisque la plupart des libs graphiques interdisent aux autres threads de manipuler les contrôles.

Discussions similaires

  1. Générer un évènement depuis un Thread
    Par bill_3737 dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 11/03/2013, 11h50
  2. Envoi d'évènement depuis un thread
    Par Natrio dans le forum C#
    Réponses: 5
    Dernier message: 10/09/2010, 12h17
  3. Réponses: 10
    Dernier message: 31/01/2010, 11h45
  4. Envoyer un événement depuis un clip pour un autre clip
    Par Negaton dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 20/05/2009, 16h53
  5. Réponses: 5
    Dernier message: 19/05/2008, 10h31

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