在新线程中调用方法并将返回值赋给变量

时间:2014-08-12 08:28:32

标签: c++ multithreading c++11

我试图将方法作为新线程调用,以及将方法返回的值分配给变量。

EG:

int numObjects = thread t7(methodName(parameter));

我该怎么做?

我确定我错过了一些简单的事情,但这让我很难过。

提前致谢

1 个答案:

答案 0 :(得分:5)

您需要将std::futurestd::async结合使用。

std::future<int> fut = std::async(methondname, parameter);

// do something

// will wait for the result to become available
std::cout << fut.get() << std::endl;

我还建议您阅读我链接到的std::async文档,因为有不同的启动策略,例如:它是真的在单独的线程中运行还是懒惰执行。

另一种可能性是简单地将输出参数(通过std::ref)与std::thread一起使用,然后您必须手动加入并且也不会获得继承到{{的异常安全性1}}。所以你最好坚持std::async