新手学C/C++:一篇代码学会使用std::future , std::promise std::async std::packaged_task完成多线程编程的回调实现

C++11异步编程(std::async, std::future, std::packaged_task, std::promise) std::async一个函数模板,会启动一个异步任务,最终返回一个std::future对象。在之前我们都是通过thread去创建一个子线,但是如果我们要得到这个子线所返回的结果,那么可能就需要用全局变量或者引用的方法来得到结果,这样或多或少都会不太方便,那么async这个函数就可以将得到的结果保存在future中,然后通过future来获取想要得到的结果。async比起... 阅读详情

source.cpp可直接拷贝到自己的环境测试, 代码基础理论知识参考:

c++11多线程编程(八):std::future , std::promise和线程的返回值:

https://blog.csdn.net/lijinqi1987/article/details/78507623

c++11多线程编程(九):std::async介绍与实例:

https://blog.csdn.net/lijinqi1987/article/details/78909479

c++11多线程编程(十):packaged_task介绍与实例:

https://blog.csdn.net/lijinqi1987/article/details/78909524

 

source.cpp:

#include <iostream>
#include <string>
#include <chrono>
#include <thread>
#include <future>

using namespace std::chrono;

struct testDb
{
    std::string operator()(std::string recvData){
        std::this_thread::sleep_for(seconds(5));
        return "Db_" + recvData;
    }

};

struct testFile
{
    std::string operator()(std::string recvData){
        std::this_thread::sleep_for(seconds(5));
        return "File_" + recvData;
    }
};

std::string fetchDataFromDB(std::string recvData) {
    //确保函数要5秒才能执行完成
    std::this_thread::sleep_for(seconds(5));

    //处理创建数据库连接、获取数据等事情
    return "DB_" + recvData;
}

std::string fetchDataFromFile(std::string recvData) {
    //确保函数要5秒才能执行完成
    std::this_thread::sleep_for(seconds(5));

    //处理获取文件数据
    return "File_" + recvData;
}


void fetchDataFromDB1(std::promise<std::string>* promiseObj, std::string recvData) {
    //确保函数要5秒才能执行完成
    std::this_thread::sleep_for(seconds(5));

    //处理创建数据库连接、获取数据等事情
    promiseObj->set_value("DB_" + recvData);
}

void fetchDataFromFile1(std::promise<std::string>* promiseObj, std::string recvData) {
    //确保函数要5秒才能执行完成
    std::this_thread::sleep_for(seconds(5));
    
    //处理获取文件数据
    promiseObj->set_v

C++ std::future 异步编程:从原理到实战的完整指南 异步编程是现代软件开发中提升性能的关键技术,它允许序在等待耗时操作(如I/O或复杂计算)时继续执行其他任务,从而提高资源利用率和响应速度。其核心原理是通过非阻塞调用和回调机制,将任务执行与结果获取解耦。在C++中,这一技术价值通过标准库的并发工具实现,使得开发者能够编写高效、可维护的多线程代码std::future作为C++11引入的关键组件,正是这一理念的具体实现,它充当了异步操作结果的‘提货单’,简化了线间数据传递与同步。在实际应用场景中,无论是网络请求、文件读写还是并行计算,std::futur 阅读详情

相关推荐

C++异步编程实战:用std::async提升序响应与性能

异步编程是现代软件开发中提升序响应性和性能的核心技术。其基本原理是将耗时操作从主执行流中分离,允许序在等待任务完成时继续处理其他工作,从而避免阻塞。这种模式在多核CPU环境下尤其重要,能够充分利用硬件并行能力,显著提升吞吐量。在C++中,标准库提供了<future>头文件,封装了高级异步操作抽象,让开发者无需直接管理线细节。通过std::asyncstd::futurestd::promise等工具,可以轻松实现任务的并发执行与结果同步。这些技术广泛应用于网络服务、图形界面、数据处理等需要高并发

weixin_30443747的博客 355

C++std::future

C++11标准库(并发支持库)中的一个模板类,它表示一个异步操作的结果。当我们在多线程编程使用异步任务时,可以帮助我们在需要的时候获取任务的执行结果。的一个重要特性是能够阻塞当前线,直到异步操作完成,从而确保我们在获取结果时不会遇到未完成的操作。

qq_41898196的博客 1万+

C++11多线程异步编程futureasyncpromisepackaged_task实战解析

多线程编程是现代软件开发中提升序性能与响应能力的关键技术,其核心在于解决同步与异步操作问题。同步通过互斥锁等机制确保线安全,而异步操作则允许任务在后台执行,通过回调或查询机制获取结果,从而避免阻塞主线,显著提高资源利用率与序响应性。C++11标准库引入的std::futurestd::asyncstd::promisestd::packaged_task等组件,为异步编程提供了标准化支持,实现了任务执行与结果获取的解耦。这些工具在并行计算、任务调度、超时控制及线池构建等场景中具有重要价值,例

weixin_31856057的博客 281

C++ 11 多线程future

std::future

索命的博客 3085

C++ 多线程std::future

future

嵌入式与人工智能 1030

C++ std::future

是用来接收一个线的执行结果的,并且是一次性的。

Wlk1229 1737

C++future类型介绍

前面已经多次提到过,那么究竟是什么呢?简单地说,可以用来获取异步任务的结果,因此可以把它当成一种简单的线间同步的手段。通常由某个 Provider 创建,你可以把 Provider 想象成一个异步任务的提供者,Provider 在某个线中设置共享状态的值,与该共享状态相关联的对象调用get(通常在另外一个线中) 获取该值,如果共享状态的标志不为ready,则调用会阻塞当前的调用者,直到 Provider 设置了共享状态的值(此时共享状态的标志变为ready),返回异步任务的值或异常(如果发生了异常)

谢谢大家的关注 3517

并发编程(6)——futurepromiseasync,线

今天习如何使用std::futurestd::asyncstd::promise

m0_63086198的博客 1885

C++并发编程std::futurestd::asyncstd::packaged_taskstd::promise的深度探索

并发编程是一种计算机编程技术,其核心在于使序能够处理多个任务同时进行。在单核处理器上,虽然任何给定的时间只能运行一个任务,但通过任务切换,可以创建出并发执行的效果。而在多核处理器上,可以真正同时处理多个任务。 并发编程的目标是提高序执行的效率。特别是在处理大量数据或需要进行大量计算的情况下,通过并发执行,可以显著提高序的运行速度。同时,也可以提高序的响应性,即使一部分任务在运行过中出现阻塞,也不会影响到其他任务的执行。 并发编程并不是一项简单的任务,它涉及到许多复杂的问题,如数据同步、资源共享

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 1596

C++11线库指南:线、锁、原子操作与并发编程实战

本文介绍了C++多线程编程的核心内容:线创建、互斥锁和RAII锁管理。线创建通过std::thread实现,支持函数、lambda表达式等可调用对象,需注意参数传递和线生命周期管理。互斥锁(mutex、timed_mutex、recursive_mutex)用于保护临界资源,避免数据竞争。RAII技术通过lock_guard等自动管理锁资源,在构造时加锁、析构时解锁,确保异常安全。文章提供了丰富的代码示例,展示了线创建、锁使用和资源管理的实际应用场景。

2302_80105876的博客 2318

C++11的异步操作(std::future,std::promise,std::packaged_task,std::async

C++11的异步操作(std::future,std::promise,std::packaged_task,std::async

qq_25048473的博客 365

C++异步编程核心组件:asyncfuturepromisepackaged_task实战解析

异步编程是现代软件开发中提升性能和响应能力的关键技术,其核心思想是将耗时的操作(如网络请求、文件读写)置于后台执行,避免阻塞主线。其基本原理是通过任务调度与结果回调机制,实现非阻塞并发。在C++中,C++11标准引入的异步编程库提供了标准化的解决方案,其技术价值在于简化并发编程模型,提高资源利用率,并增强代码的可维护性。常见的应用场景包括高性能服务器开发、并行计算、GUI应用以及数据处理流水线。本文聚焦于C++异步编程的四个核心组件——std::asyncstd::futurestd::promise

weixin_33824385的博客 296

c+11 多线程asyncfuturepackaged_taskpromise

1 std::async std::future创建后台任务并返回值 目的:希望线返回一个结果 std::async是个函数模板,用来启动一个异步任务,启动起来一个异步任务。什么叫“启动一个异步任务”,就是自动创建一个线并开始执行对应的线入口函数,它返回一个std::future对象,这个std::future对象里面就含有线函数返回的结果,我们可以通过调用std::future对象的成员...

会飞的鱼 225

C++异步编程实战:std::asyncstd::future核心用法详解

异步编程是现代软件开发中提升序响应性和资源利用率的核心技术,其原理在于将耗时操作交由后台执行,避免阻塞主线。在C++中,标准库提供了基于多线程的异步编程模型,通过任务分解与结果回调机制实现并发执行。这一技术的工价值在于简化并发逻辑,充分利用多核CPU性能,尤其适用于计算密集型任务和I/O密集型场景中的性能优化。C++11引入的std::asyncstd::future组件构成了轻量级异步方案的基础,其中std::async作为任务启动器支持异步与延迟执行策略,而std::future则作为结果凭证,

weixin_33946020的博客 349

C++异步编程入门:std::asyncstd::future实战指南

在并发编程中,异步操作是提升序响应性和资源利用率的核心技术。其原理在于将耗时任务(如网络请求、文件读写)交由后台线执行,主线无需阻塞等待,从而继续处理其他事务。C++11标准库通过<future>头文件提供了std::asyncstd::future等工具,简化了异步任务的启动与结果获取。这种模式尤其适用于I/O密集型或计算量较大的场景,能有效避免界面卡顿。本文以C++异步编程为例,结合std::async的启动策略和std::future的阻塞调用,演示如何通过简单的代码实现并发任务,并涵盖异常处

circularr9834的博客 310

C++异步编程入门:使用std::asyncstd::future实现任务并发

异步编程是现代软件开发中提升序响应能力与吞吐量的核心技术,其核心思想是将耗时操作从主执行流中分离,避免阻塞。在C++中,这一概念通过标准库的并发设施实现,特别是基于任务(task-based)的模型。其原理是通过将函数或可调用对象封装为独立任务,在后台线执行,同时通过future对象提供结果的异步获取机制。这种模式的技术价值在于简化了并发编程的复杂度,开发者无需直接管理线生命周期。在C++11及更高版本中,std::async函数与std::future模板共同构成了这一模型的基础实现,广泛应用于文件

weixin_34347651的博客 386

C++】关于std::futurestd::asyncstd::promisestd::packaged_task的示例

参考这篇博客,里面有举例说明。

Vingnir的博客 264

C++11并发与多线程笔记(9) asyncfuturepackaged_taskpromise

第九节、asyncfuturepackaged_taskpromise 本节内容需要包含头文件#include 一、std::asyncstd::future创建后台任务并返回值 std::async一个函数模板,用来启动一个异步任务,启动起来一个异步任务之后,它返回一个std::future对象,这个对象是个类模板。 什么叫“启动一个异步任务”?就是自动创建一个线,并开始 执行对应的线入口函数,它返回一个std::future对象,这个std::future对象中就含有线入口函数所返回的

视觉小浩 260
上一篇: 新手学C/C++:析构函数是否必须为虚函数?什么情况下才应该定义析构函数为虚函数?
下一篇: 初入职常见问题:弱网络环境构造、压力测试、内存泄漏、性能持续优化工具
3471992915
博客等级 码龄11年 8粉丝 17原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值