系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、多线程异步任务
- 1.1 基本概念
- 1.2 使用函数介绍
- 1.2.1 什么叫“启动一个异步任务”
- 1.2.2 std::async
- 1.2.3 std::future
- 二、代码案例
- 总结
前言
语言:C++11;
介绍
(1)什么是多线程异步任务?
(2)介绍std::async、std::future函数使用;
(3)编写完整的代码案例并附截图。
一、多线程异步任务
1.1 基本概念
线程各执行各的,没有顺序依赖。
- 线程同步:是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率不高,例如多个电脑共用一台打印机设备。
- 线程异步:访问资源时,如果有空闲时间,则可在空闲等待同时访问其他资源,实现多线程机制,一个浏览器可以打开多个使用。
1.2 使用函数介绍
std::async、std::future创建后台并返回值
1.2.1 什么叫“启动一个异步任务”
就是自动创建一个线程并开始执行对应的线程入口函数,它返回一个std::future
对象,
1.2.2 std::async
std::async
是个函数模板
,用来启动
一个异步任务,启动起来一个异步任务之后,它返回一个std::future
对象。
1.2.3 std::future
std::future
是个类模板
。这个std::future对象里边就含有线程入口函数所返回的结果(线程返回的结果),我们可以通过调用future对象的成员函数get()
来获取结果;
“future”
:将来的意思,有人也称呼std::future提供了一种访问异步操作结果的机制,就是说这个结果
你可能没有办法马上拿到,但不久的将来。
在线程执行完毕
的时候,你就能够拿到结果了,所以大家就这么理解:这个future(对象)里会保存一个值,在将来的某个时刻
(1)等待线程返回
std::future对象的get()
成员函数等待线程执行结束并返回结果;
get()函数:不拿到将来的返回值 誓不罢休,不拿到值我就卡在这里等待拿值。
wait()函数:等待线程返回,本身并不返回结果。
二、代码案例
代码如下(示例):
#include
#include
#include
#include
#include
#include
运行截图(示例):
开始等待5秒钟

5秒钟结束后

总结
(1)了解多线程异步任务;
(2)了解线程同步和线程异步的区别;
(3)如何创建一个“异步任务”?
(4)C++11 中std::async、std::future函数使用,以及get()函数的使用。
持续更新中…