写点什么

C++ 如何拿到线程池的返回值

作者:linux大本营
  • 2023-04-20
    湖南
  • 本文字数:736 字

    阅读完需:约 2 分钟

要想拿到线程池的返回值,需要以下几个步骤:


  1. 首先,你需要创建一个 std::future 对象来存储线程池的返回值。 std::future 是 C++11 标准中引入的一种机制,该机制可以在异步任务完成时存储其返回值。

  2. 接着,你需要使用 std::async 函数来启动异步任务。该函数将任务提交到线程池,返回一个 std::future 对象,可用于异步地获取异步任务的结果。

  3. 最后,在需要获取返回值的地方,调用 std::future::get() 方法来获取异步任务的返回值。如果异步任务未完成,则该方法将会阻塞,直到任务完成才会返回结果。


下面是一个简单的示例:


#include <iostream>#include <future>#include <chrono>#include <thread>#include <vector>#include <functional>#include <algorithm>
int foo(int x) { std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟耗时操作 return x * x;}
int main() { std::vector<std::future<int>> results;
std::vector<int> inputs = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (auto input : inputs) { results.push_back(std::async(std::launch::async, foo, input)); }
std::for_each(results.begin(), results.end(), [](std::future<int>& f) { std::cout << f.get() << std::endl; });
return 0;}
复制代码


在该示例中,我们启动了一个线程池,并向其提交了 10 个任务。然后,我们将所有任务的结果存储在 std::vector<std::future<int>> 中,并使用 std::for_each() 循环获取每个任务的结果。在调用 std::future::get() 方法时,如果异步任务未完成,则该方法将会阻塞,直到任务完成才会返回结果。


相关技术视频教程:c/c++ linux服务器开发/后台架构师免费学习地址

c/c++后端技术交流群:812855908

用户头像

还未添加个人签名 2020-11-26 加入

C/C++linux服务器开发群 812855908

评论

发布
暂无评论
C++如何拿到线程池的返回值_线程池_linux大本营_InfoQ写作社区