每日一个C++知识点|异步编程

上篇文章说到C++多线程的基础知识, 这篇文章主要说C++多线程的另一个重要知识–异步

异步

那么什么是异步呢? 当程序执行一个耗时任务的时候, 主线程硬生生等待线程任务结束,不仅效率低, 还会让程序响应变得卡顿

这时候我们可以使用异步编程来解决这个问题,异步编程的核心就是非阻塞地执行任务,
就是让主线程继续干自己的活, 把耗时任务交给后台去执行, 等任务完成后, 再去去结果, 不需要等待

举个例子:这就像你点外卖,不用站在门口等骑手,而是可以继续工作,等外卖到了再去取, 这就是异步编程的精髓

异步编程的实现

在了解什么是异步编程的核心之后, 我们接下来进一步了解应该怎么实现异步编程呢?
实现异步编程的核心工具主要有三个, 分别是std::async:,std::future:,std::launch::async:

std::async:是异步编程的接口, 可以可以自动管理线程, 不用我们手动创建、销毁线程

std::future:用来获取异步任务结果的工具

std::launch::async:是异步编程的启动策略之一, 作用是强制创建新线程来执行任务, 确保任务是真正异步运行的, 除此之外, 还有std::launch::deferred等策略

下面用一个简单的代码示例来实现异步编程核心工具的用法

#include<iostream>#include<future>// 必须包含的头文件#include<chrono>// 用于时间操作// 定义一个耗时的函数:计算某个数的平方,模拟耗时任务intcalculateSquare(intnum){// 模拟耗时操作(比如复杂计算、网络请求)std::this_thread::sleep_for(std::chrono::seconds(2));returnnum*num;}intmain(){std::cout<<"主线程开始执行~"<<std::endl;// 1. 异步执行任务:强制创建线程执行calculateSquare(5)std::future<int>fut=std::async(std::launch::async,calculateSquare,5);// 2. 主线程可以继续执行其他任务,不会被阻塞std::cout<<"主线程在异步任务执行时,还能干别的事~"<<std::endl;// 3. 获取异步任务的结果(如果任务没完成,这里会阻塞等待)intresult=fut.get();// get()只能调用一次,调用后future就会失效std::cout<<"异步任务结果:5的平方是"<<result<<std::endl;std::cout<<"主线程结束~"<<std::endl;return0;}

运行结果如下:

在整个过程中, 主线任务没有因为异步任务的耗时而阻塞, 这正是多线程异步编程的体现

总结

异步是多线程编程的重要组成部分, 其核心是非阻塞执行任务, 并根据自己需要获取结果, 其中std::async,std::futurestd::launch::async是异步编程中最重要的工具

希望这篇文章能帮大家搞懂 C++ 异步编程的基础用法, 如果觉得内容有用,记得点赞和收藏哦~

感兴趣的朋友可以关注CSDN同名公众号 [ 图形学爱好者Wu ] ~后续将会继续分享更多C++干货

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1014782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索非线性电液伺服系统的模型预测控制(MPC)之旅

非线性电液伺服系统模型预测控制&#xff08;MPC&#xff09;pdf教程matlab/simulink源程序 s函数编写在控制领域&#xff0c;非线性电液伺服系统一直是个颇具挑战但又充满魅力的存在。今天咱就聊聊基于模型预测控制&#xff08;MPC&#xff09;方法以及对应的 Matlab/Simulink…

Simulink双馈风机稳态模型:从理论到实践

simulink 双馈风机稳态模型 包含最大功率跟踪控制&#xff0c;MPPT&#xff0c;参数可调 &#xff08;1&#xff09;转子侧变换器采用基于定子电压定向的矢量控制策略&#xff0c;可以有功无功解耦&#xff0c;具备MPPT能力&#xff0c;采用功率外环电流内环双闭环控制结构&…

基于单片机的火焰与温度联动检测及声光灭火控制系统

基于单片机的火焰与温度联动检测及声光灭火控制系统设计概述 点击链接下载设计资料&#xff1a;https://download.csdn.net/download/qq_39020934/92091154 1.1 设计背景与研究意义 随着建筑规模的不断扩大和居住、办公环境的日益复杂&#xff0c;火灾隐患已成为威胁人身安全…

探索三相、五相电机的容错控制奥秘

三相、五相电机容错控制 三相电机断开一相容错控制&#xff1b; 五相电机断开一相、相邻两相容错控制在电机控制领域&#xff0c;容错控制就像是给电机系统加上了一层“保险”&#xff0c;确保在部分故障情况下仍能稳定运行。今天咱们就来深入聊聊三相和五相电机的容错控制。 三…

完整教程:【Nginx 】Nginx 部署前端 vue 项目

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

MATLAB 风力发电系统低电压穿越之串电阻策略探索

MATLAB 风力发电系统低电压穿越—串电阻策略 低电压穿越 双馈风力发电机 本人研究方向电机控制与故障诊断嘿&#xff0c;大家好&#xff01;今天来聊聊我在电机控制与故障诊断研究方向中&#xff0c;关于 MATLAB 风力发电系统低电压穿越的串电阻策略这块有趣的内容。咱们都知道…

Best 5 Anime AI Video Tools in 2026 (Free)

If you’re trying to turn real footage into “anime-looking” clips in 2026, the market basically splits into two workflows:Video-to-video style transfer (you already have footage; you want an anime “…

探索 S7 - 1200 地铁屏蔽门控制系统

地铁屏蔽门控制系统&#xff0c;S7-1200地铁屏蔽门控制系统&#xff0c;地铁门控制系统&#xff0c;系统才用西门子博途&#xff0c;S7-1200PLC编程&#xff0c;wincc组态&#xff0c;包括PLC组态仿真画面在现代城市轨道交通中&#xff0c;地铁屏蔽门控制系统起着至关重要的作用…

探索高压无桥PFC:原理图、PCB与源代码之旅

高压无桥PFC原理图PCB源代码资料在电力电子领域&#xff0c;功率因数校正&#xff08;PFC&#xff09;技术对于提高电能利用效率、降低谐波污染至关重要。而高压无桥PFC作为一种新兴的技术方案&#xff0c;正逐渐崭露头角。今天&#xff0c;咱就一起来深入探究下高压无桥PFC的原…

探索非线性电液伺服系统:基于ESO的反步滑模控制之旅

非线性电液伺服系统&#xff0c;基于ESO(扩张状态观测器)的反步滑模控制。 pdf教程matlab/simulink源程序。 s—函数搭建 1.通过扩展状态观测器估计速度、加速度和总扰动; 2.根据在线估计的系统模型&#xff0c;设计包含反步控制和滑模控制的控制率&#xff0c;对实际系统进行控…

Java中如何检测死锁?如何预防和避免线程死锁?

Java死锁实战指南&#xff1a;从检测到预防的完整解决方案 在并发编程中&#xff0c;死锁如同一个隐形的陷阱&#xff0c;随时可能让高性能应用陷入瘫痪。当多个线程相互等待对方释放锁时&#xff0c;程序便会永久停滞。 本文将提供一套完整的死锁解决方案&#xff1a;首先介绍…

自动化测试-关键数据记录(日志+截图+页面源码)

文章目录1. 自动化测试中的关键数据&#xff1f;2. 配置日志3. 截图4. pagesource源码记录总结✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来&#xff01; 编程真是一件很奇妙的东西。你只是浅尝辄止&#xff0c;那么只会觉得枯燥乏味&#xff0c;像对待任务似的应…

做题记录2.0

日期 任务||目标 题目 完成情况 算法 易错点 思维难度 总结2022/4/28 入门经典P220-P240 汤姆斯的天堂梦 AC 动态规划 循环嵌套 查看题解 输入数据存不下时,输入的时候运算归并排序 AC 分治 循环嵌套,范围限制 程序实…

DAY11@浙大疏锦行

笔记&#xff1a;参数优化步骤&#xff1a;1.在调参前&#xff0c;先建立基线模型&#xff1a;- 使用**默认参数**训练模型- 记录性能指标作为**对比基准**- 后续调参效果以此为参照2.对参数进行定义1️⃣ 网格搜索 (GridSearchCV)- 需要定义参数的**固定列表**&#xff08;par…

1分钟升级Nature正刊中的蛋白质跨膜结构域

买家秀 R9AP 的 N 端定位于细胞表面。通过 TMHMM预测 R9AP 的定位。 卖家秀 DeepTMHMM 预测的拓扑结构 输入 >sp|Q6ZS82|R9BP_HUMAN Regulator of G-protein signaling 9-binding protein OS=Homo sapiens OX=9606 GN=RGS9BP PE=1 SV=1 MAREECKALLDGLNKTTACYHHLVLTVGGSAD…

MC Workbench6.4电机位置控制

MC Workbench6.4电机位置控制 之前的 MC Workbench 版本一直缺少原生位置控制功能&#xff0c;给电机控制开发带来不少不便。而 6.4 版本终于补齐了这个短板&#xff0c;本文就带大家一步步实现 STM32G431 电机开发板的位置控制&#xff0c;从工程创建到实际运行全程详解&…

30、Nagios配置与使用全攻略

Nagios配置与使用全攻略 1. Nagios配置基础 Nagios的所有配置都通过“Configuration”选项卡完成。GroundWork将自身配置信息存储在MySQL数据库中。当你在界面上进行更改时,这些更改首先会反映在数据库里。只有当你提交更改后,GroundWork才会将配置转换为单独的Nagios配置文…

分治算法刷题总结

148. 排序链表 两个思路,一种是从顶向下的排序,另外的一种是从低向上的归并排序,归并排序的复杂度是NLogN class Solution {public ListNode sortList(ListNode head) {if (head == null || head.next == null)retu…

IPv4地址与IPv6地址

如大家所了解的&#xff0c;互联网协议地址&#xff08;Internet Protocol Address&#xff0c;简称IP地址&#xff09;&#xff0c;是分配给网络上使用互联网协议&#xff08;IP&#xff09;的每个设备&#xff08;如计算机、服务器、智能手机等&#xff09;的数字标签。IP地址…

Fluent中颗粒流模拟的门道

Fluent的颗粒流 稀疏颗粒常使用DPM模型进行解决 不考虑颗粒碰撞变形&#xff0c;但考虑颗粒之间的碰撞行为&#xff0c;可以使用欧拉颗粒流模型 考虑颗粒碰撞摩擦以及变形&#xff0c;可以使用其内置的DEM模型&#xff0c;也可以采用与其他DEM软件耦合处理 考虑颗粒在运动过程…