Partage
  • Partager sur Facebook
  • Partager sur Twitter

Impossible d'effectuer une action sans System.out?

    27 avril 2016 à 12:44:48

    Bonjours, 

    J'ai un gros soucis avec plusieurs programmes, que ce soit en C (arduino) ou Java.

    En effet, mes programmes, si on en suit l'algorithme, doivent fonctionner, MAIS, ceux-ci ne fonctionne pas.

    On peut se demander pourquoi ? En utilisant des Serial.print (arduino) et des System.out en Java pour comprendre ce qui bloque les programmes, c'est là que par magie, ces programmes fonctionnent ! Je vous montre un exemple : 

    http://prntscr.com/axfatf

    Ici, une fonction ne se lance que si un boolean est VRAI, or jusqu'ici cela fonctionne, lorsque je clique sur mon bouton qui change l'état de ce boolean, la fonction se lance.

    Mais si j'enlève les System.out qui me donne l'état de ce boolean, lorsque je clique sur mon bouton, rien ne s’exécute !

    Si vous avez une explication ou une solution pour ce phénomène qui me pose assez problème, je suis preneur ! Merci.

    • Partager sur Facebook
    • Partager sur Twitter
      27 avril 2016 à 14:46:20

      Pourquoi tu es dans une boucle infinie?
      • Partager sur Facebook
      • Partager sur Twitter
        27 avril 2016 à 17:19:56

        Essaie de déclarer ta variable démarrage en volatile

        private volatile static boolean demarrage = false;



        • Partager sur Facebook
        • Partager sur Twitter
          27 avril 2016 à 19:01:39

          Comme tu es dans une boucle, je ne suis pas sûr que modifier 'demarrage' à l'extérieur de la boucle soit pris en compte.

          System.out doit interrompre la boucle pour afficher et du coup cela fonctionne dans ce cas.

          Peut être un Thread.sleep(50) dans la boucle.

          ou

          Comme le dit -Nox, ta variable en volatile. Dans ce cas, ta variable doit être mise à jour avant chaque accès.

          • Partager sur Facebook
          • Partager sur Twitter
            27 avril 2016 à 19:33:14

            -Nox a écrit:

            Essaie de déclarer ta variable démarrage en volatile

            private volatile static boolean demarrage = false;



            tokazio a écrit:

            Comme tu es dans une boucle, je ne suis pas sûr que modifier 'demarrage' à l'extérieur de la boucle soit pris en compte.

            System.out doit interrompre la boucle pour afficher et du coup cela fonctionne dans ce cas.

            Peut être un Thread.sleep(50) dans la boucle.

            ou

            Comme le dit -Nox, ta variable en volatile. Dans ce cas, ta variable doit être mise à jour avant chaque accès.



            C'est sûrement ça alors, avec un volatile effectivement ça fonctionne ! Savez-vous comment faire ce genre de variable en C ?

            Merci en tout cas ;)

            • Partager sur Facebook
            • Partager sur Twitter
              27 avril 2016 à 19:50:05

              Je n'ai jamais codé en C, mais selon Google le mot clé volatile existe apparemment aussi en C.
              • Partager sur Facebook
              • Partager sur Twitter
                27 avril 2016 à 21:04:45

                oui volatile en C.

                La variable est placé dans la mémoire principale et lu à chaque accès. Pas de cache. Thread safe.

                • Partager sur Facebook
                • Partager sur Twitter

                Impossible d'effectuer une action sans System.out?

                × 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