在std :: async或std :: bind中传递参数?

时间:2015-03-25 17:45:48

标签: c++ c++11 asynchronous

这是我的班级

class Foo
{
    public:
        void foo(const std::string&);
};

int main()
{
    Foo* pFoo = new Foo();
    std::string str = "string";
    //If I want to start an async task, I could do this:
    std::async(std::launch::async, std::bind(&Foo::foo, pFoo,  std::placeholders::_1), str);
    //or do this:
    std::async(std::launch::async, std::bind(&Foo::foo, pFoo, str));
}

那有什么区别?使用哪种方式更安全?

1 个答案:

答案 0 :(得分:3)

std::future<void> t = std::async(std::launch::async, &Foo::foo, pFoo, str);

std::bind此时基本上已经过时了。在极少数情况下使用lambdas甚至需要lambdas。

async是许多std函数中的一个,它们将成员函数视为标准函数,但this作为第一个参数。所以没有绑定或lambda或你需要什么。

始终存储结果。如果在msvc上,则始终为wait,因为msvc具有不合规future。该标准规定std::future的析构函数如果来自异步异步则会阻塞。 MSVC违反了这一点。由于标准违规行为有被还原的习惯,因此总是wait,如果他们生成兼容的编译器,就会阻止意外。