c++multithreadingc++11std

How to use std::async on a member function?


How can I operate std::async call on a member function?

Example:

class Person{
public:
    void sum(int i){
        cout << i << endl;
    }
};

int main(int argc, char **argv) {
    Person person;
    async(&Person::sum,&person,4);
}

I want to call to sum async.

Person p;
call async to p.sum(xxx)

I didnt figure out if i can do it with std::async. Dont want to use boost. Looking for a one line async call way.


Solution

  • Something like this:

    auto f = std::async(&Person::sum, &p, xxx);
    

    or

    auto f = std::async(std::launch::async, &Person::sum, &p, xxx);
    

    where p is a Person instance and xxx is an int.

    This simple demo works with GCC 4.6.3:

    #include <future>
    #include <iostream>
    
    struct Foo
    {
      Foo() : data(0) {}
      void sum(int i) { data +=i;}
      int data;
    };
    
    int main()
    {
      Foo foo;
      auto f = std::async(&Foo::sum, &foo, 42);
      f.get();
      std::cout << foo.data << "\n";
    }