从线程运行函数时如何返回值[重复]

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&lt;T&gt;,如下所示

#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; 

【讨论】:

以上是关于从线程运行函数时如何返回值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我如何从c ++中的函数返回多个值[重复]

如何在从函数返回的地图中打印值[重复]

从C ++ 11中的线程返回一个值[重复]

从函数调用分配多个返回值的性能[重复]

如何从Python中获取线程的返回值?

如何从python中的线程获取返回值?