web-dev-qa-db-fra.com

Méthode d'appel std :: thread de la classe

Duplicate 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 est-il 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 threads de la méthode runMultiThread()?

PS Merci, j'ai oublié qu'il me fallait passer this, en tant que paramètre.

56
kobra

Pas si dur:

#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 plutôt un futur:

#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();
}
155
Kerrek SB