0

0

C++ async与future用法教程_C++异步任务返回值获取方法

穿越時空

穿越時空

发布时间:2025-12-02 13:33:07

|

219人浏览过

|

来源于php中文网

原创

C++中async与future用于异步任务执行和结果获取,std::async启动任务并返回std::future对象,通过get()阻塞获取结果,支持超时检测与异常传递,提升并发编程效率。

c++ async与future用法教程_c++异步任务返回值获取方法

C++中的asyncfuture是处理异步任务和获取返回值的核心工具,适用于需要并发执行且获取结果的场景。它们定义在头文件中,配合使用可以轻松实现多线程任务的非阻塞调用和结果获取。

async与future基本概念

std::async用于启动一个异步任务,返回一个std::future对象,该对象可用来获取任务的返回值或异常。任务可以在新线程中执行,也可以延迟执行,取决于启动策略。

常用启动策略:

  • std::launch::async:强制在新线程中执行任务
  • std::launch::deferred:延迟执行,直到调用get()时才在当前线程执行

默认策略是两者均可,由系统决定。

立即学习C++免费学习笔记(深入)”;

获取异步函数的返回值

通过future.get()获取异步任务的返回值,该调用会阻塞,直到结果就绪。

示例代码:
#include 
#include 
#include 

int compute_sum(int a, int b) {
    std::this_thread::sleep_for(std::chrono::seconds(2));
    return a + b;
}

int main() {
    // 启动异步任务
    std::future result = std::async(std::launch::async, compute_sum, 10, 20);

    std::cout << "正在执行计算...\n";

    // 获取结果(阻塞等待)
    int sum = result.get();
    std::cout << "结果: " << sum << "\n";

    return 0;
}

输出:

Autoppt
Autoppt

Autoppt:打造高效与精美PPT的AI工具

下载
正在执行计算...
结果: 30

注意:get()只能调用一次,之后future变为无效状态。

检查任务状态与非阻塞获取

使用future.wait_for()future.wait_until()可实现超时检查,避免长时间阻塞。

示例:带超时的结果获取
std::future fut = std::async(compute_sum, 5, 15);

auto status = fut.wait_for(std::chrono::milliseconds(100));
if (status == std::future_status::ready) {
    std::cout << "结果: " << fut.get() << "\n";
} else {
    std::cout << "任务未完成\n";
}

这适合对响应时间敏感的应用,比如用户界面或实时系统。

异常传递与错误处理

异步任务中抛出的异常会被捕获并存储,调用get()时重新抛出。

std::future f = std::async([]{
    throw std::runtime_error("任务失败");
});

try {
    f.get();
} catch (const std::exception& e) {
    std::cout << "捕获异常: " << e.what() << "\n";
}

这种机制让主线程能统一处理异步任务的异常,提升程序健壮性。

基本上就这些。掌握async与future的组合使用,能有效简化C++异步编程中的结果获取流程,避免手动管理线程和共享数据的复杂性。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

481

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

143

2025.12.24

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

143

2025.12.24

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

68

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

123

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

34

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

19

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

85

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.8万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

ASP 教程
ASP 教程

共34课时 | 3.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号