#include <iostream>
#include <thread>
using namespace std;
int foo(int n){
int doubleN = n * 2;
return doubleN;
}
int main(){
int n = 2;
thread t(foo,n);
t.join();
return 0;
}
就上述代码而言,我可以在主函数中获得doubleN的值吗?
答案 0 :(得分:4)
如果要获取线程执行的任务结果,可以使用async
函数:
int foo(int n){
int doubleN = n * 2;
return doubleN;
}
int main(){
int n = 2;
future<int> result = async(std::launch::async, foo,n);
cout << result.get() << endl; //4
return 0;
}
答案 1 :(得分:1)
您可以使用std::promise
和std::future
,cppreference std::promise
文档有一个示例来演示如何使用promise<int>
在线程(link)之间传输结果。
#include <iostream>
#include <thread>
#include <future>
using namespace std;
int foo(int n, std::promise<int> doubleN_promise){
int doubleN = n * 2;
doubleN_promise.set_value(doubleN);
return doubleN;
}
int main(){
int n = 2;
std::promise<int> doubleN_promise;
std::future<int> doubleN_future = doubleN_promise.get_future();
thread t(foo, n, std::move(doubleN_promise));
doubleN_future.wait(); // wait for doubleN
std::cout << "doubleN=" << doubleN_future.get() << '\n';
t.join();
return 0;
}