当前位置: 首页 > news >正文

std::future概念和使用方法

1 概念

  • std::future是 C++ 标准库中<future>头文件提供的一个模板类,用于异步操作的结果获取。它提供了一种访问异步操作结果的机制,通常与std::asyncstd::packaged_taskstd::promise一起使用。
  • 异步操作可以在另一个线程中执行,std::future对象允许当前线程在需要的时候获取异步操作的结果,并且可以检查异步操作是否已经完成。

2 使用方法

1. 包含头文件

在使用std::future之前,需要包含<future>头文件:

#include <future>

2. 与std::async一起使用

  • std::async会自动创建一个新的线程或者在当前线程的空闲时间执行异步任务,并返回一个std::future对象来保存任务的结果。
#include <iostream>
#include <future>int add(int a, int b) 
{return a + b;
}int main() 
{// 异步执行add函数,返回一个std::future对象std::future<int> result = std::async(add, 3, 4);// 获取异步操作的结果,如果任务还没有完成,会阻塞当前线程直到任务完成int sum = result.get();std::cout << "Result: " << sum << std::endl;return 0;
}

3. 与std::packaged_task一起使用

  • std::packaged_task将一个可调用对象(如函数、函数对象等)包装起来,使其可以异步执行,然后可以通过get_future方法获取对应的std::future对象。
#include <iostream>
#include <future>int add(int a, int b) 
{return a + b;
}int main() 
{std::packaged_task<int(int, int)> task(add);std::future<int> result = task.get_future();// 可以在另一个线程中执行tasktask(3, 4);int sum = result.get();std::cout << "Result: " << sum << std::endl;return 0;
}

4. 与std::promise一起使用

  • std::promise用于在一个线程中设置一个值(或者异常),然后在另一个线程中通过与之关联的std::future对象来获取这个值(或者异常)。
#include <iostream>
#include <future>int main()
{std::promise<int> prom;std::future<int> result = prom.get_future();// 在另一个线程中可以执行如下操作// prom.set_value(10);int value = result.get();std::cout << "Value: " << value << std::endl;return 0;
}

std::future在多线程编程中非常有用,它可以帮助你更好地管理异步任务的结果,避免了手动管理线程和同步机制的复杂性。


http://www.mrgr.cn/news/45698.html

相关文章:

  • erlang学习:Linux命令学习10
  • 【PCL】Ubuntu22.04 安装 PCL 库
  • 三层网络与三层组网
  • Polars简介
  • 一款基于 Spring Boot、Vue、Element UI 的快速开发平台,零代码开发,致力于做更简洁的后台管理系统(附源码)
  • Comfyui segmentAnythingUltra V2报错
  • Verilog开源项目——百兆以太网交换机(九)表项管理模块设计
  • 面向对象技术——设计模式
  • 详解正确创建好SpringBoot项目后但是找不到Maven的问题
  • 刷题 二叉树
  • (22)以RS码为例说明信道编码AWGN信道的Eb/N0设置
  • 【电商搜索】现代工业级电商搜索技术-EMNLP2024-无监督的用户偏好学习
  • 大数据新视界 --大数据大厂之 Presto 性能优化秘籍:加速大数据交互式查询
  • 动态规划算法题目练习——91.解码方法
  • 九、5 USART串口数据包
  • Windows的兼容性为什么这么强大?
  • LVS负载均衡群集
  • 基于SSM车位租赁系统【附源码】
  • DAMA数据管理知识体系(第6章 数据存储和操作)
  • 快速启动工具 | Biniware Run v7.1.0.0 绿色中文版