Partage
  • Partager sur Facebook
  • Partager sur Twitter

Producteur/Consommateur

    27 avril 2015 à 18:20:37

    Actuellement je voudrais créer un petit programme qui me permettrait de tracer une courbe en temps réelle. Je pense qu'il faut que j'utilise une sorte de producteur consommateur car pour afficher les points il faut qu'il y ai des valeurs dans le tableau. Cependant, je ne vois pas du tout comment faire et par quoi commencer. 

    Si vous aviez une piste qui pourrait m'aider, ca serait avec grand plaisir.

    Merci pour votre aide 

    • Partager sur Facebook
    • Partager sur Twitter
      27 avril 2015 à 21:49:21

      Aide moi donc ! J'arrive pas

      -
      Edité par JeanEude1 27 avril 2015 à 21:50:24

      • Partager sur Facebook
      • Partager sur Twitter
        28 avril 2015 à 10:49:34

        Salut,

        peux-tu être un peu plus précis s'il te plais, tracer une courbe sensée représenter quoi? une fonction sur des données?

        • Partager sur Facebook
        • Partager sur Twitter
          28 avril 2015 à 10:51:42

          Salut,

          A la réponse de para_doxx, j'ajouterais : à partir de données, aléatoirement ?

          ThiL

          • Partager sur Facebook
          • Partager sur Twitter
          Apprendre, c'est tout d'abord comprendre. As tu ThiLté ? ;)
            28 avril 2015 à 11:26:43

            Bah en fait je dois afficher une courbe de consommation. Mais les valeurs je dois les générer a partir de mon programme. Ce sont des valeurs aléatoires en fait. Donc tant que je n'ai pas de valeurs créer, je ne peux pas afficher. C'est pour ça que je fais un producteur consommateur.
            • Partager sur Facebook
            • Partager sur Twitter
              28 avril 2015 à 11:34:05

              si tu parles du design pattern producteur consommateur, tu veux probablement faire un Thread (ou process) qui génère des nombres aléatoirement les met dans une Queue,  le consommateur doit t'il dessiner graphiquement (interface graphique) les valeurs tirées?

              Edit: la courbe serait fonction du temps?

              -
              Edité par para_doxx 28 avril 2015 à 11:36:42

              • Partager sur Facebook
              • Partager sur Twitter
                28 avril 2015 à 11:35:29

                Alors, pour commencer je coderais une application qui me permette d'obtenir des valeurs abscisses et des valeurs ordonnées sous forme de deux tableaux.

                (J'utilise pas mal le C# en ce moment donc exemple)

                fonction générant nombre aléatoire ==> https://msdn.microsoft.com/fr-fr/library/system.random%28v=vs.110%29.aspx

                Une fois c'est deux tableaux réalisés, l'application créera une courbe prenant en abscisse le tableauA et en ordonnée le tableauB.
                (à voir dans le forum, il y a des sujets sur cela) 

                ThiL

                • Partager sur Facebook
                • Partager sur Twitter
                Apprendre, c'est tout d'abord comprendre. As tu ThiLté ? ;)
                  28 avril 2015 à 12:04:00

                  Para_doxx: Oui je voudrais faire un thread et je veux afficher graphiquement les valeurs du tableau. 

                  THil : Sauf que je veux afficher une courbe en temps réel. Je ne veux pas de tableau avec des valeurs fait d'avance. Je voudrais que dans mon programme, le tableau se remplisse valeur par valeur et que le consommateur dessine une valeur graphiquement que quand le producteur a produit une valeur. 

                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 avril 2015 à 13:03:46

                    Ah, et bien si tu veux faire cela en .NET regarde l'API Threading, comme l'a dit THil le producteur devra tout simplement générer des nombres aléatoires et les stocker dans une queue, ça fait un moment que je n'ai pas fait de .NET mais je pense que concurent bag pourrai faire l'affaire, cela va te permettre de gérer les accès concurrent pouvant se produire sur la queue si un thread modifie la liste lorsque l'autre y accède en lecture, tu peux aussi utiliser l’instruction "lock" sur ta queue si je ne m'abuse.

                    Concernant l'a restitution graphique je ne suis pas très au fait de se qu'il existe en .NET...:euh:

                    -
                    Edité par para_doxx 28 avril 2015 à 13:04:11

                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 avril 2015 à 13:14:51

                      La réponse de para_doxx me parait excellente. J'ajouterai juste que pour la restitution graphique faudra regarder du côté des librairies disponibles. GDI+ est utilisée pour de la restitution graphique mais je n'en sais pas plus. Désolé

                      Bon courage

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Apprendre, c'est tout d'abord comprendre. As tu ThiLté ? ;)
                        28 avril 2015 à 14:21:26

                        Pour le graphique je sais faire ne vous inquiétez pas. Mais c'est que je ne vois pas trop comment codé le producteur consommateur en fait.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 avril 2015 à 14:59:48

                          Je n'ai pas Visual Studio sous la main donc il va falloir très indulgent...

                          Il faut d'abord coder ton Thread qui génère les valeurs...

                          ConcurrentBag<int> queue = new ConcurrentBag<int>();
                          
                          Thread producer = new Thread(() => {
                          
                          Random randGen = new Random();
                          
                            while(true){
                              queue.add(randGen.Next(100);//ajout à la suite
                              //attendre un peu avant la prochaine écriture
                              Thread.sleep(50);
                            }
                          }).start()

                          Voilà tout bêtement, le principe est la ... la notation un peu particuliére ()=>{} est une expression lamdba, le corps de la fonction est à l’intérieur des accolade comme si il s'agissait d'une fonction classique et entre parenthèses les paramètres que prend la lambda (ici void)  elle évite l'écriture d'un delegate ou d'une fonction complète, c'est plus rapide...

                          d'autre exemples ici sans les expression lambda...

                          Ce thread va donc ajouter à notre Queue un élément aléatoire entre 0 et 100 toutes les 50ms.

                          Le thead consommateur va être du même type mais il va piocher dans la liste (afin de les afficher) au lieu d'y ajouter des éléments regarde les méthodes de la classe concurrentbag je te laisse le faire tiens moi au courant et demande si tu as des questions

                          -
                          Edité par para_doxx 28 avril 2015 à 15:03:16

                          • Partager sur Facebook
                          • Partager sur Twitter
                            28 avril 2015 à 15:10:57

                            J'essaie de coder cela tout a l'heure, je te tiens au courant. En tout cas, merci beaucoup
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Producteur/Consommateur

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown