Partage
  • Partager sur Facebook
  • Partager sur Twitter

C++ passer plusieurs arguments dans un Thread

    3 septembre 2018 à 21:55:34

    bonjour,

    je fais des essais sur les threads pour essayer de bien comprendre.

    lorsque je passe 1 argument, pas de problèmes, mais dès que je veux en mettre d'autres, cela bloque.

    void fonction(int x, int y)
    {
        //
    }
    
    int main()
    {
        int x = 5;
        int y = 0;
    
        sf::Thread thread_essai(&fonction, x, y);
        thread_essai.launch();
    
        return EXIT_SUCCESS;
    }
    
    

    j'ai le message d'erreur suivant :

    no matching function for call to 'sf::Thread::Thread(void (*)(int, int), int&, int&)'|





    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      3 septembre 2018 à 22:01:30

      Je ne connais pas bien SFML, mais si je le base sur ce que dit la documentation (https://www.sfml-dev.org/documentation/2.5.0/classsf_1_1Thread.php), on dirait qu'il n'y a pas de façon directe de faire ce que tu veux, puisque la documentation dit que la fonction peut avoir 0 ou 1 argument.

      Tu peux essayer de jouer avec `std::bind`, à ce que j'ai vu sur certains forums SFML.

      Mais tout ça n'est que théorie, je ne connais pas bien.

      • Partager sur Facebook
      • Partager sur Twitter
        3 septembre 2018 à 22:05:13

        merci.

        j'ai essayé bind, mais à priori ça ne fonctionne pas.

        ce qui est bizarre, c'est que dans la documentation SFML ils montrent avec plusieurs arguments...

        -
        Edité par tof13bis 3 septembre 2018 à 22:05:30

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          3 septembre 2018 à 22:10:58

          Montre un exemple de ce que tu as vu dans la documentation. On pourra déjà comparer.
          • Partager sur Facebook
          • Partager sur Twitter
            3 septembre 2018 à 22:46:49

            il faut aller sur la page :

            https://www.sfml-dev.org/tutorials/2.5/system-thread-fr.php

            et là on trouve :

            void func(std::string, int, double)
            {
            }
            
            sf::Thread thread(std::bind(&func, "hello", 24, 0.5));

            qui effectivement utilise "bind". mais en faisant exactement ce qui est marqué, ça ne fonctionne pas...

            ceci dit en passant, c'est quoi "bind" ?

            • Partager sur Facebook
            • Partager sur Twitter
              3 septembre 2018 à 23:19:21

              C'est une fonction qui retourne un foncteur sur func avec des valeurs pré-établit. newfunc = bind(func, "hello", 24, 0.5); newfunc() => func("hello", 24, 0.5).

              Mais il vaut mieux utiliser une lambda: []{ func("hello", 24, 0.5); }

              Tu peux voir cela comme une manière simple d'écrire une fonction au milieu du code.

              > qui effectivement utilise "bind". mais en faisant exactement ce qui est marqué, ça ne fonctionne pas...

              Il faut donner les erreurs du compilateur.

              • Partager sur Facebook
              • Partager sur Twitter
                3 septembre 2018 à 23:25:03

                Salut,

                Voici la doc de std::bind ;)

                Pour faire simple: cela permet d'appeler une fonction en veillant à lui transmettre les paramètres qu'elle s'attend à recevoir (ou une partie d'entre eux), en créant ce que l'on appelle un "wrapper' qui est -- pour faire simple -- une fonction qui n'aura pas besoin des paramètre déjà transmis ;)

                • Partager sur Facebook
                • Partager sur Twitter
                Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                  4 septembre 2018 à 18:13:35

                  merci à vous 2, je vais étudier cela et donnerai des nouvelles, à savoir si j'ai réussi ou non.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  C++ passer plusieurs arguments dans un Thread

                  × 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