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

std::async 和 std::thread 的主要区别

std::async 和 std::thread 的主要区别如下:

### 1. 获取返回值
- std::async : 可以直接获取返回值

auto future = std::async([]{ return 42; });
int result = future.get();  // 直接获取返回值

std::thread : 需要通过其他方式传递结果

int result;
std::thread t([&result]{ result = 42; });
t.join();  // 等待线程结束

### 2. 异常处理
- std::async : 可以捕获任务中的异常

auto future = std::async([]{ 
    throw std::runtime_error("错误");
    return 42; 
});
try {
    future.get();  // 异常会在这里被捕获
} catch(const std::exception& e) {
    // 处理异常
}

std::thread : 异常需要在线程内处理

std::thread t([]{ 
    try {
        throw std::runtime_error("错误");
    } catch(...) {
        // 必须在线程内处理
    }
});

### 3. 线程管理
- std::async : 自动管理线程的创建和销毁
- std::thread : 需要手动调用 join() 或 detach()
### 4. 使用场景
- std::async : 适合
  
  - 需要返回值的任务
  - 需要异常处理
  - 简单的异步操作
- std::thread : 适合
  
  - 需要更细粒度控制的场景
  - 长期运行的任务
  - 需要直接控制线程的场景

async使用

// 1. 一定在新线程中执行
auto f1 = std::async(std::launch::async, []{ return 42; });

// 2. 一定延迟到get()调用时在当前线程执行
auto f2 = std::async(std::launch::deferred, []{ return 42; });

// 3. 系统自动选择执行方式
auto f3 = std::async([]{ return 42; });

返回值是std::future<xxx>

调用get方法获取结果

int ret = f1.get();

http://www.dtcms.com/a/117282.html

相关文章:

  • 使用Vue、Nodejs以及websocket搭建一个简易聊天室
  • 项目难点亮点
  • 国密算法(SM2/SM3/SM4)与国际算法(AES/RSA/SHA-256)
  • 数据集的训练-测试拆分在机器学习中的重要性
  • Mac下Homebrew的安装与使用
  • SLAAC 与 DHCPv6 笔记250405
  • adb devices报错 ADB server didn‘t ACK
  • 第八届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组 购物单
  • 23种设计模式-行为型模式-状态
  • 使用 Qt 和 OBS 工具检测系统硬件编码器支持情况(NVENC、QSV、AMF)
  • InceptionNeXt:When Inception Meets ConvNeXt论文翻译
  • ML:Sigmoid 饱和函数
  • C++第1讲:基础语法;通讯录管理系统
  • ROS云课三分钟-差动移动机器人巡逻报告如何撰写-评分良好
  • python:获取某路径下所有图片的名称
  • 拉普拉斯变换
  • COMSOL 与人工智能融合的多物理场应用:28个案例的思路、方法与工具概述
  • 【C++ 多态】—— 礼器九鼎,釉下乾坤,多态中的 “风水寻龙诀“
  • Springboot JPA 集成ShardingSphere
  • 复活之我会二分
  • Python 上下文管理器(Context Manager)详解
  • 小行星轨道预测是怎么做的?从天文观测到 AI 模型的完整路径
  • linux下编译Websocketpp,适用x86和armv8
  • Three.js 系列专题 6:后处理与特效
  • XELA机器人多种“形态和玩法”的Uskin磁性阵列式三轴触觉传感器,你使用过了吗?
  • 【区块链安全 | 第三十四篇】合约审计之重入漏洞
  • 39常用控件_QWidget的geometry属性
  • OpenCV 图形API(18)用于执行两个矩阵(或数组)的逐元素减法操作函数sub()
  • 机器学习——ROC曲线、PR曲线
  • 剖析AI与5G:是夸大其词,还是时代变革的引擎?-优雅草卓伊凡