首页 > 编程语言 >C++ 异步 async future 等

C++ 异步 async future 等

时间:2024-09-22 13:01:12浏览次数:1  
标签:std task int C++ future result async include

async 和 future

这个和 C# 的 Task 有点像。

#include <iostream>
#include <string>
#include <memory>
#include <future>
#include <thread>

using namespace std;

int calculate()
{
    std::this_thread::sleep_for(std::chrono::seconds(2));
    return 42;
}

class Dog
{
public:
    int wangWang()
    {
        std::this_thread::sleep_for(std::chrono::seconds(3));
        return 23;
    }
};

int main()
{
    std::future<int> res = std::async(std::launch::async, calculate);
    int result = res.get(); // 这里会等待完成
    cout << result << '\n';
    Dog dog;
    res = std::async(std::launch::async, &Dog::wangWang, &dog); // 成员函数
    int dog_result = res.get();
    cout << dog_result << '\n';

    return EXIT_SUCCESS;
}

输出:

42
23

std::packaged_task

#include <iostream>
#include <memory>
#include <future>
using namespace std;

int calculate(int x, int y)
{
    return x + y;
}

class Dog
{
public:
    int calculate(int x, int y)
    {
        return x + y;
    }
};

int main()
{
    // 直接绑定函数
    std::packaged_task<int(int, int)> task(calculate);
    std::future<int> f_result = task.get_future();
    std::thread t(std::move(task), 100, 200);
    t.join();
    int result = f_result.get();
    cout << result << '\n';

    // bind 类成员函数 可调用对象
    Dog dog;
    std::function<int(int, int)> func = 
        std::bind(&Dog::calculate, &dog, std::placeholders::_1, std::placeholders::_2);
    std::packaged_task<int(int, int)> task_1(func);
    std::future<int> f_result_1 = task_1.get_future();
    std::thread t_1(std::move(task_1), 10, 20);
    t_1.join();
    int result_1 = f_result_1.get();
    cout << result_1 << '\n';

    system("pause");
    return EXIT_SUCCESS;
}

输出:

300
30

promise

能够在某个线程中给它赋值,然后我们可以在其他线程中,把这个取值出来用;

#include <future>
#include <iostream>
int main()
{
    std::promise<int> p;
    std::future<int> f = p.get_future();

    std::thread t([&p]()
        {
            p.set_value(42);
        });
    t.join();

    int result = f.get();
    std::cout << result << std::endl; // 输出42

    system("pause");
    return EXIT_SUCCESS;
}




参考:http://www.seestudy.cn/?list_9/43.html

标签:std,task,int,C++,future,result,async,include
From: https://www.cnblogs.com/huvjie/p/18425170

相关文章

  • C++ std::call_once 实现单例模式
    #if1#include<iostream>#include<memory>#include<mutex>usingnamespacestd;classSingleton{public:staticSingleton&getInstance(){std::call_once(m_OnceFlag,&Singleton::init);return*m_Insta......
  • 【C/C++】速通涉及string类的经典编程题
    【C/C++】速通涉及string类的经典编程题一.字符串最后一个单词的长度代码实现:(含注释)二.验证回文串解法一:代码实现:(含注释)解法二:(推荐)1.函数isalnum介绍:2.函数tolower介绍:3.代码实现:三.翻转字符串II:区间部分翻转代码实现:(含注释)四.翻转字符串III:翻转字符串中的单词代......
  • 01背包问题之背包容量为什么要倒序遍历?(以C++代码具体实现为例)
    首先是先阐述一下背包问题:有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用依次,求解将哪些物品装入背包里物品价值总和最大。这里不解释代码的其他部分,只对代码中的背包容量遍历进行具体的解释,首先给出遍历部分的代......
  • C++ 笔试常用算法模板
    C++笔试常用算法模板一、二叉树遍历DFSBFS二、回溯模板三、动态规划01背包朴素版本滚动数组优化完全背包朴素版本滚动数组优化最长递增子序列朴素版本贪心+二分优化最长公共子序列最长回文子串四、图建图邻接矩阵邻接表图的遍历DFSBFS拓扑排序并查集最小生成树Kr......
  • C++: 使用红黑树模拟实现STL中的map和set
    目录1.红黑树的迭代器++和--2.改造红黑树3.set的模拟实现4.map的模拟实现5.RBTree的改造代码博客主页:酷酷学正文开始1.红黑树的迭代器迭代器的好处是可以方便遍历,是数据结构的底层实现与用户透明打开C++的源码我们可以发现,其实源码中的底层大概如下......
  • 南沙C++信奥老师解一本通题:1372:小明的账单
    ​ 【题目描述】小明在一次聚会中,不慎遗失了自己的钱包,在接下来的日子,面对小明的将是一系列的补卡手续和堆积的账单…在小明的百般恳求下,老板最终同意延缓账单的支付时间。可老板又提出,必须从目前还没有支付的所有账单中选出面额最大和最小的两张,并把他们付清。还没有支付的......
  • 【最新原创毕设】基于SpringBoot的乐山市景区旅游攻略网+49117(免费领源码)可做计算机毕
    目 录摘要1绪论1.1选题背景与意义1.2开发现状1.3论文结构与章节安排2 乐山市景区旅游攻略网站系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3......
  • 最新毕设-Node.js-游戏网站-031726(免费领项目)可做计算机毕业设计JAVA、PHP、爬虫、APP
    游戏网站的设计摘 要基于网络游戏的蓬勃发展,游戏网站发挥着吸引玩家和提高玩家之间的互动性的重要作用,因而,建设了一个以游戏为中心的游戏官网。 该游戏提供了一个大型的玩家交流互动平台,包括用户管理、游戏社区、游戏信息、分类信息、游戏资讯、论坛分类列表、新闻分类列......
  • C++ | C++中与const相关的权限放大和缩小详解
    文章目录C++中与`const`相关的权限放大和缩小详解一、`const`的重要性及基本概念二、权限缩小(从非`const`到`const`)(一)指针的权限缩小(二)引用的权限缩小三、权限放大(从`const`到非`const`)(一)一般情况下的限制(二)通过特定类型转换进行权限放大四、注意事项C++中与const......
  • 《C++中的神秘利器——类型萃取(Type Traits)深度解析》
    在C++的浩瀚世界中,类型萃取(TypeTraits)犹如一把神奇的钥匙,为开发者打开了高效编程的大门。那么,C++中的类型萃取究竟有什么用呢?让我们一同深入探究。一、类型萃取的基本概念类型萃取从字面意思理解,就是帮助我们挑选某个对象的类型,筛选特定的对象来做特定的事。它是C++模......