当前位置: 首页 > 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();

相关文章:

  • 使用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
  • 复活之我会二分
  • 哪些网站可以免费做推广呢/域名注册网站查询
  • Dw怎么做网站往里面加标题和字/天津网站排名提升多少钱
  • 学校 网站源码/怎么推广自己的微信号
  • 做算命网站挣钱么/seo品牌优化
  • 信誉好的集团网站建设/经营管理培训课程
  • 做视频网站视频短片/微信营销推广软件