Classe et std::async sur le membre de classe en C++

Je vais essayer d'écrire un membre de la classe qui en appelle un autre membre de la classe plusieurs fois en parallèle.

J'ai écrit un exemple simple du problème et ne peut même pas arriver à le compiler. Ce que je fais mal avec l'appel de std::asynchrone? Je crois que le problème serait avec la façon dont je suis passant à la fonction.

#include <vector>
#include <future>
using namespace std;
class A
{
    int a,b;
public: 
    A(int i=1, int j=2){ a=i; b=j;} 

    std::pair<int,int> do_rand_stf(int x,int y)
    {
        std::pair<int,int> ret(x+a,y+b);
        return ret;
    }

    void run()
    {
        std::vector<std::future<std::pair<int,int>>> ran;
        for(int i=0;i<2;i++)
        {
            for(int j=0;j<2;j++)
            {
                auto hand=async(launch::async,do_rand_stf,i,j);
                ran.push_back(hand);    
            }
        }
        for(int i=0;i<ran.size();i++)
        {
            pair<int,int> ttt=ran[i].get();
            cout << ttt.first << ttt.second << endl;
        } 
    }
};

int main()
{
    A a;
    a.run();
}

compilation:

g++ -std=c++11 -pthread main.cpp 
  • Passer *this comme troisième paramètre de async.
  • Si vous obtenez des erreurs lors de la compilation ou de la liaison, il serait une bonne idée d'inclure ces erreurs dans la question, de préférence verbatim.
  • Vous n'avez pas besoin d'utiliser pthread plus avec C++11 🙂 c'est est l'un des plus grand plus dans C++11 ( threading ). async() est implicite thread si asynchrone lancement et explicite le filetage est également là dans le langage lui-même.
InformationsquelleAutor UldisK | 2012-08-01