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;
}

输出:

Sora
Sora

Sora是OpenAI发布的一种文生视频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

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

52

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

54

2026.01.19

java输出数组相关教程
java输出数组相关教程

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

35

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

15

2026.01.19

热门下载

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

精品课程

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

共58课时 | 3.9万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

ASP 教程
ASP 教程

共34课时 | 3.8万人学习

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

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