news 2026/4/18 12:11:34

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
每日一个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++干货

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 9:19:59

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

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

作者头像 李华
网站建设 2026/4/18 2:12:53

基于泰坦尼克号数据集的随机森林算法实战

数据预处理 ​ 选取 Pclass &#xff08;船舱等级&#xff09;、 Sex &#xff08;性别&#xff09;、 Age &#xff08;年龄&#xff09;作为特征&#xff0c; Survived &#xff08;是否存活&#xff09;作为标签。 ​用均值填充年龄空值&#xff0c;避免缺失值影响模型训练&…

作者头像 李华
网站建设 2026/4/18 7:38:30

30、Nagios配置与使用全攻略

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

作者头像 李华
网站建设 2026/4/17 23:23:50

亿赛通脚本远程调试配置技巧

要进行远程调试&#xff0c;主要是对 Tomcat 和 Java进程 进行调试。以下是针对该系统的远程调试配置方法&#xff1a; 一、Tomcat远程调试配置 1. 修改Tomcat启动脚本 找到Tomcat的启动脚本&#xff08;通常在/esafenet/tomcat/bin/catalina.sh或startup.sh&#xff09;&#…

作者头像 李华
网站建设 2026/4/18 9:42:59

图片转文字技术(一)从光学识别到智能理解的演进之路

引言 在数字化浪潮中&#xff0c;图片转文字技术已悄然渗透到我们日常生活的方方面面。从手机相册中提取证件信息&#xff0c;到扫描纸质文档生成可编辑文本&#xff1b;从自动驾驶汽车识别路牌&#xff0c;到视障人士通过屏幕阅读器获取图像内容——这项技术的应用场景正在不断…

作者头像 李华
网站建设 2026/4/18 5:17:16

【Python与生活】Python实战 | 全网最全QS世界大学排名分析

一、前言 QS世界大学排名是全球最具影响力的大学排名之一&#xff0c;无论是留学选校、学术研究还是高校竞争力分析&#xff0c;都有重要参考价值。本文将手把手教你用Python完成QS排名的数据爬取、清洗、分析与可视化&#xff0c;从0到1实现完整的数据分析流程&#xff0c;即使…

作者头像 李华