std::async可以认为是封装了一个std::promise,该函数返回一个std::future,用于获取其他线程的数据。

该函数的本质是内部封装构造了一个线程,然后传递给一个std::promise,之后返回一个对应的std::future。如果不是线程池,而仅仅是异步调用,那么非常推荐使用该模式。

一般有两种模式:

  • std::lanch::async:最常用的异步模式,每次都要执行一遍
  • std::lanch::defer:只在第一次调用的时候执行,之后再调用返回之前的调用结果。

给出代码示例:

#include <iostream>
#include <future>
#include <chrono>
#include <string>int int_async (int n) {printf ("begin int_async..\n");std::this_thread::sleep_for (std::chrono::seconds(n));printf ("int_async result is 100\n");return 100;
}std::string string_async (int n) {printf ("begin string_async..\n");std::this_thread::sleep_for (std::chrono::seconds(n));printf ("string_async result is \"success\"\n");return std::string ("success");
}int main() {std::future<int> fut1 = std::async (std::launch::async, &int_async, 2);std::future<std::string> fut2 = std::async (std::launch::async, &string_async, 1);std::cout << "I am waiting...\n";std::cout << fut1.get() << ", " << fut2.get() << std::endl;return 0;
}

运行结果:

C++11多线程------std::async相关推荐

  1. C++11之std::async使用介绍

    在C++11中有个async异步函数,其声明如下: template <class Fn, class... Args> future<typename result_of<F ...

  2. C++多线程std::async、std::future、std::packaged_task、std::promise

    std::async std::async用于创建异步任务,实际上就是创建一个线程执行相应任务,默认立即开始执行. std::async就是异步编程的高级封装,std::async的操作,其实相当于封 ...

  3. C++11中std::async的使用

    C++11中的std::async是个模板函数.std::async异步调用函数,在某个时候以Args作为参数(可变长参数)调用Fn,无需等待Fn执行完成就可返回,返回结果是个std::future对 ...

  4. 用C++11的std::async代替线程的创建

    转自:http://www.cnblogs.com/qicosmos/p/3534211.html c++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的: void f(int ...

  5. C++11多线程中std::call_once的使用

    C++11中的std::call_once函数位于<mutex>头文件中. 在多线程编程中,有时某个任务只需要执行一次,此时可以用C++11中的std::call_once函数配合std: ...

  6. Multi-thread--C++11多线程中std::call_once的使用

    C++11中的std::call_once函数位于<mutex>头文件中. 在多线程编程中,有时某个任务只需要执行一次,此时可以用C++11中的std::call_once函数配合std: ...

  7. C++11 多线程(std::thread)详解

    注:此教程以 Visual Studio 2019 Version 16.10.3 (MSVC 19.29.30038.1) 为标准,大多数内容参照cplusplus.com里的解释 此文章允许转载, ...

  8. C++多线程:异步操作std::async和std::promise

    文章目录 std::async 简介 使用案例 std::promise 简介 成员函数 总结 之前的文章中提到了C++多线程中的异步操作机制 C++ 多线程:future 异步访问类(线程之间安全便 ...

  9. c+++11并发编程语言,C++11并发编程:多线程std:thread

    原标题:C++11并发编程:多线程std:thread 一:概述 C++11引入了thread类,大大降低了多线程使用的复杂度,原先使用多线程只能用系统的API,无法解决跨平台问题,一套代码平台移植, ...

最新文章

  1. OData Console in C4C and Gateway Client in CRM Fiori
  2. Wireshark 在Windows下的安装
  3. 中大计算机考研复试刷人太狠,中山大学考研复试被刷原因大盘点!
  4. sqlserver 2008安装总是弹出重启提示
  5. LeetCode 334. 递增的三元子序列
  6. 服务器被bash服务占满_用bash脚本自动下载ftp服务器文件
  7. php 查询 判断 语句,关于php的判断语句
  8. Oracle count函数原理,oracle count函数
  9. Web API 文档生成工具 apidoc
  10. Java中遍历Map集合的3种方式
  11. 详解相机的sensor工作原理
  12. 装Linux gpt还是mbr,装机、装系统必备:秒懂MBR和GPT分区表
  13. 物理光学3 电磁波的折射与反射
  14. 研究了四大计算机名校的培养方案,核心课程都在这了
  15. 波士顿法律第一至五季/全集Boston Legal迅雷下载
  16. 阿里云视频点播(java)
  17. iis php 500 内部服务器错误,服务器_iis的http 500内部服务器错误的解决,iis的http 500内部服务器错误是 - phpStudy...
  18. Failing OffsetCommit request since the consumer is not part of an active group
  19. 新建word文档,最上方页眉处总是自己出现一条横线,去除方法总结
  20. C语言进阶剖析 13 接续符和转义符

热门文章

  1. 嵌入不同源的页面_嵌入式技术课程教与学(教学大纲和试卷)
  2. 高阻态是0还是1_羽毛球拍穿线,先拉横线还是竖线?是否横线要比竖线高1到2磅?...
  3. Python爬虫之编辑cookie实例:必胜客餐厅
  4. pytorch学习笔记(十八):Use-Gpu
  5. 2019 蓝桥杯省赛 B 组模拟赛(一) J. 程序设计:蒜厂年会 环形连续子序列求和问题
  6. 目标检测——夏侯南溪模型搭建篇
  7. GAN——欧几里得空间
  8. NumPy中特别的数组函数 By Youki~
  9. libusb获取usb设备的idVendor(vid),idProduct(pid),以及Serial Number
  10. Python 标准库 —— string