从线程运行函数时如何返回值[重复]
Posted
技术标签:
【中文标题】从线程运行函数时如何返回值[重复]【英文标题】:How would I return a value while running a function from a thread [duplicate] 【发布时间】:2020-09-25 01:08:47 【问题描述】:使用 std #include 如果我想让线程运行它,我将如何返回一个值?
例如
include <iostream>
#include <thread>
usingnamespace std;
int func(int a)
int b = a*a
return b;
int main()
thread t(func);
t.join();
return 0;
如何修改
thread t(func);
这样我就可以得到b
【问题讨论】:
可能重复:***.com/questions/7686939/…***.com/questions/47355735/…***.com/questions/21082866/…***.com/questions/12320003/… 您可以改用std::async
。
对于 std::async 看看davidespataro.it/cpp-concurrency-threads-future
是的,尽管我真的很喜欢异步,但我的书说我需要使用 std::thread
【参考方案1】:
您不能使用 std::thread
从函数中返回值,但您可以更改 std::thread
的结构以获取您的值或使用 std::sync
返回一个包含您的值的 std::future<T>
,如下所示
#include <iostream>
#include <thread>
int func(int a)
int b = a * a;
return b;
int main()
int result;
std::thread t([&] result = func(3); );
t.join();
std::cout << result;
return 0;
或
#include <iostream>
#include <future>
int main()
auto f = std::async(std::launch::async, func, 3);
std::cout << f.get();
return 0;
【讨论】:
以上是关于从线程运行函数时如何返回值[重复]的主要内容,如果未能解决你的问题,请参考以下文章