94 votes

std::thread appelle une méthode de la classe

Duplicata possible :
Démarrer le fil avec la fonction membre

J'ai une petite classe :

class Test
{
public:
  void runMultiThread();
private:
  int calculate(int from, int to);
}  

Comment il est possible d'exécuter la méthode calculate avec deux jeux de paramètres différents (par exemple calculate(0,10) , calculate(11,20) ) dans deux fils de la méthode runMultiThread() ?

PS Merci j'ai oublié que j'ai besoin d'un pass this comme paramètre.

231voto

Kerrek SB Points 194696

Pas si difficile :

#include <thread>

void Test::runMultiThread()
{
    std::thread t1(&Test::calculate, this,  0, 10);
    std::thread t2(&Test::calculate, this, 11, 20);
    t1.join();
    t2.join();
}

Si le résultat du calcul est toujours nécessaire, utilisez une fonction futur à la place :

#include <future>

void Test::runMultiThread()
{
     auto f1 = std::async(&Test::calculate, this,  0, 10);
     auto f2 = std::async(&Test::calculate, this, 11, 20);

     auto res1 = f1.get();
     auto res2 = f2.get();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X