这是我的班级
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));
}
那有什么区别?使用哪种方式更安全?
答案 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
,如果他们生成兼容的编译器,就会阻止意外。