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 :

Attente d'un event dans une boucle


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Attente d'un event dans une boucle
    Bonjour

    Dans une boucle j'aimerais a chaque step attendre en event (style click sur un boutont) afin de permetre une analyse pas a pas

    En C console sous dos j'aurais fais ca tres simplement sous forme d'un getch()
    Mais quelle serait la maniere la plus simple de faire cela en C#
    (ne me dites pas que je suis obligé de rendre la fonction qui contient ma boucle re-entrantre en sauvant les parametre d'etat ! )

    Je vois une solution, c'est d'appeler une fonction qui boucle en attendant le changement d'etat d'un flag et de changer l'etat de ce flag sur l'event click d'un bouton : qui dit mieux ??

  2. #2
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Points : 443
    Points
    443
    Par défaut
    Bonjour,

    Une autre solution plus clean serait d'utiliser une instance de la classe AutoResetEvent (System.Threading). Ce type permet de synchroniser les threads, d'attendre par exemple qu'un thread ait fini son boulot.

    Voici un exemple qui n'a pas vraiment de sens, mais qui te montre comment ça marche :
    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
    class Program
    {
        static AutoResetEvent ev = new AutoResetEvent(false);
     
        static void Main(string[] args)
        {
            Thread thread = new Thread(new ThreadStart(procedure));
            thread.Start();
     
            Console.WriteLine("Appuie sur une touche pour débloquer le thread");
            Console.ReadKey();
     
            ev.Set();
     
            Console.ReadKey();
        }
     
        static void procedure()
        {
            Console.WriteLine("Bloqué");
            ev.WaitOne();
            Console.WriteLine("Debloqué");
        }
    }
    Essaie ce code dans une application console, tu devrais comprendre comment ça marche.

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Paul

    Oui je vois le principe !
    Maintenant c'est peut etre plus clean mais je ne suis pas sur que ce soit plus "léger" en terme de code que ma bete boucle
    D'autant qu'il s'agit simplement d'introduire (pour controle visuel) une attente dans un boucle qui normalement doit tourner toute seule

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    l'objet monitor avec la méthode Pulse() peut-etre ?

  5. #5
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    Citation Envoyé par olibara Voir le message
    Merci Paul

    Oui je vois le principe !
    Maintenant c'est peut etre plus clean mais je ne suis pas sur que ce soit plus "léger" en terme de code que ma bete boucle
    D'autant qu'il s'agit simplement d'introduire (pour controle visuel) une attente dans un boucle qui normalement doit tourner toute seule
    la méthode WaitOne() sur le type AutoResetEvent permet une attente non active, à contrario de la boucle traditionnelle, qui consomme beaucoup de CPU
    Je trouve cela de loin plus propre...
    Ca vaut peut-être le coup de coder un peu plus pour avoir une exécution plus "propre" non?

  6. #6
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Tout a fait d'accord sur le principe
    D'ailleurs je peux en faire une methode generique comme ca je ne barbouille pas mon code principal de declarations propres a la gestion de l'attente !

    C'est ce que je reproche généralement a la gestion des thread, c'est que la portion fonctionelle du code est noyée dans le code necessaire au thread !

Discussions similaires

  1. [langage] incrementation de variable dans une boucle
    Par mimilou dans le forum Langage
    Réponses: 15
    Dernier message: 16/04/2004, 13h23
  2. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19
  3. swf dans une boucle asp
    Par Chucky69 dans le forum Flash
    Réponses: 11
    Dernier message: 10/02/2004, 17h07
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

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