让我们说一个函数,
int fun(){
static int a = 10;
a = a+1;
return a;
}
上面的函数返回一个整数值,
//Without thread obtaining return value
#include<iostream>
int main()
{
int var = 0;
var = fun();
std::cout << "The value " << value << std::endl;
return 0;
}
当C ++ 11线程调用
时,现在有任何可能的方法来获取返回值。//Using thread
#include<iostream>
#include<thread>
int main()
{
std::thread t1(fun);//Invoking thread
//How to obtain the return value of the thread ?
return 0;
}
谢谢!
答案 0 :(得分:4)
您可能要考虑使用std::async()
:
auto res = std::async(fun);
std::cout << res.get() << '\n';
答案 1 :(得分:1)
您可以使用async
(承诺的未来(双关语意)或打包的任务)。
// future from a packaged_task
std::packaged_task<int()> task(fun); // wrap the function
std::future<int> f1 = task.get_future(); // get a future
std::thread(std::move(task)).detach(); // launch on a thread
// future from an async()
std::future<int> f2 = std::async(std::launch::async, fun);
// future from a promise
std::promise<int> p;
std::future<int> f3 = p.get_future();
std::thread( [](std::promise<int>& p){ p.set_value(fun()); },
std::ref(p) ).detach();
std::cout << "Waiting...";
f1.wait();
f2.wait();
f3.wait();
std::cout << "Done!\nResults are: "
<< f1.get() << ' ' << f2.get() << ' ' << f3.get() << '\n';
答案 2 :(得分:0)
否,std::thread
只是一个简单的C ++包装器,它允许启动OS执行线程并等待其完成。
要与调用线程共享返回值,可以手动为线程提供共享状态,也可以使用更高级别的工具,例如packaged_task
,future
等。