Partage
  • Partager sur Facebook
  • Partager sur Twitter

création de thread à l'intérieur d'une classe

Sujet résolu
    24 juin 2019 à 9:55:30

    Bonjour à tous,

    N'ayant pas trouvé une réponse qui me satisfasse je me tourne vers vous pour une petite question de "détail" concernant la création d'un thread à l'intérieur d'une classe. Voici le contexte :

    class MyClass
    {
    public:
        bool A(void); 
    private:
        void B(std::vector<std::pair<int, std::string> > &v);
    };


    et voici ce que je fais dans la méthode publique :

    bool MyClass::A()
    {
    // some stuff
     
        std::thread t( &MyClass::B, this, std::ref(v) );    // v.1
        std::thread t( &MyClass::B, std::ref(v) );        // v.2
    
    // some stuff
    t.join();
    }


    Je ne souhaite pas rendre static la méthode pour x raisons.

    Ma question porte sur la syntaxe et les arguments à passer entre v.1 et v.2 : le this est-il nécessaire ou obligatoire ? Et surtout, pour quelles raisons ? (dans ma tête, ça voit les choses en mode "je suis déjà à l'intérieur de la classe, je ne sais donc pas pourquoi je devrais le spécifier à nouveau")

    Merci pour vos éclaircissements sur ce point !

    Max

    .

    • Partager sur Facebook
    • Partager sur Twitter

    Si ça n'explose pas, alors ce n'est pas intéressant.

      24 juin 2019 à 10:34:34

      Lu'!

      This est implicite pour les appels qui sont effectués normalement avec l'opérateur ".", ce qui n'est pas le cas ici. Ici tu appelles le constructeur de thread.

      • Partager sur Facebook
      • Partager sur Twitter

      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

        24 juin 2019 à 11:12:58

        MaximeB25 a écrit:

        Ma question porte sur la syntaxe et les arguments à passer entre v.1 et v.2 : le this est-il nécessaire ou obligatoire ? Et surtout, pour quelles raisons ? (dans ma tête, ça voit les choses en mode "je suis déjà à l'intérieur de la classe, je ne sais donc pas pourquoi je devrais le spécifier à nouveau")


        Le this est obligatoire dès qu'il s'agit du fonction membre non statique. C'est comme décrit par la fonction std::invoke. On peut passer un certain nombre de paramètres selon les types de fonction (fonction libre, membre static ou non, placeholders, foncteurs, ...).

        En arrière plan, quand tu passes une fonction membre non statique le mécanisme d'invocation a besoin de savoir sur quel objet l'appeler. Et cet objet peut-être passé par pointeur (this directement) ou par référence (mais peut faire des copie dans ce cas, sauf avec std::ref).

        • Partager sur Facebook
        • Partager sur Twitter

        git is great because Linus did it, mercurial is better because he didn't.

          24 juin 2019 à 11:27:14

          Ksass`Peuk a écrit:

          Lu'!

          This est implicite pour les appels qui sont effectués normalement avec l'opérateur ".", ce qui n'est pas le cas ici. Ici tu appelles le constructeur de thread.


          Hello,

          Merci pour vos réponses ! J'y vois bien plus clair sur ce point grâce à vous :)

          -
          Edité par MaximeB25 24 juin 2019 à 11:28:25

          • Partager sur Facebook
          • Partager sur Twitter

          Si ça n'explose pas, alors ce n'est pas intéressant.

          création de thread à l'intérieur d'une classe

          × 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