C++11中async中future用法(一)
async意味着异步执行代码,看如下示例:
#include <future>
#include <thread>
#include <chrono>
#include <random>
#include <iostream>
#include <exception> using namespace std; int do_something(char c)
{
std::default_random_engine dre(c);
std::uniform_int_distribution<int> id(10, 1000); for (int i = 0; i < 10; ++i)
{
this_thread::sleep_for(chrono::microseconds(id(dre)));
cout << c << ends;
} return c;
} int main() {
cout << "begin ..." << endl;
std::future<int> result = std::async(do_something, 'c');
cout << "waiting for result ..." << endl;
cout << "\n" << result.get() << endl;
cout << "finish!" << endl;
}
当对result调用get时,如果此时do_something函数还没有执行完毕,那么会导致main函数阻塞在这里,一直到该函数执行完毕。
async返回的是一个future对象,从字段意思上推测,结果是在未来的某一个时刻拿到。
async实际上是在背后偷偷的开启一个线程执行函数,但是上面的实例看不出来,于是我们写一个复杂一些的实例:
#include <future>
#include <thread>
#include <chrono>
#include <random>
#include <iostream>
#include <exception> using namespace std; int do_something(char c)
{
std::default_random_engine dre(c);
std::uniform_int_distribution<int> id(10, 1000); for (int i = 0; i < 10; ++i)
{
this_thread::sleep_for(chrono::microseconds(id(dre)));
cout << c << ends;
} return c;
} int func1()
{
return do_something('.');
} int func2()
{
return do_something('*');
} int main()
{
cout << "start ..." << endl;
// std::future<int> result1(std::async(std::launch::deferred, func1));
std::future<int> result1(std::async(func1)); int result2 = func2(); int result = result1.get() + result2; cout << "\nresult of func1() + func2(): " << result << endl;
}
这个程序的执行结果中 .和*乱序出现,说明func1和func2是乱序执行的,这是因为func1是在另一个线程中执行的。
C++11中async中future用法(一)的更多相关文章
- C#中async和await用法
.net 4.5中新增了async和await这一对用于异步编程的关键字. async放在方法中存在await代码的方法中,await放在调用返回Task的方法前. class Class1 { pr ...
- (转)Spring中@Async用法总结
原文:http://blog.csdn.net/blueheart20/article/details/44648667 引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的: ...
- Spring中@Async用法总结
引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3. ...
- Spring中@Async用法详解及简单实例
Spring中@Async用法 引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类 ...
- [翻译] Python 3.5中async/await的工作机制
Python 3.5中async/await的工作机制 多处翻译出于自己理解,如有疑惑请参考原文 原文链接 身为Python核心开发组的成员,我对于这门语言的各种细节充满好奇.尽管我很清楚自己不可能对 ...
- SpringBoot中Async异步方法和定时任务介绍
1.功能说明 Spring提供了Async注解来实现方法的异步调用. 即当调用Async标识的方法时,调用线程不会等待被调用方法执行完成即返回继续执行以下操作,而被调用的方法则会启动一个独立线程来执行 ...
- 【转】Spring中@Async
Spring中@Async 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实, ...
- C#中timer类的用法
C#中timer类的用法 关于C#中timer类 在C#里关于定时器类就有3个 1.定义在System.Windows.Forms里 2.定义在System.Threading.Timer类 ...
- Spring中@Async注解实现“方法”的异步调用
原文:http://www.cnblogs.com/zhengbin/p/6104502.html 简单介绍: Spring为任务调度与异步方法执行提供了注解支持.通过在方法上设置@Async注解,可 ...
随机推荐
- ajax 调用 JSON.parse();
$.ajax({ type : "POST", data:{ createStartTime:createStartT ...
- myBatis自动生成mapping,dao和model
myBatis没有自动封装实体类.所以都需要自己编写,但是表数据过多时.编写难度就会增加,错误率也会增加! 所以myBatis提供mybatis-generator-core-1.3.2-bundle ...
- 重置mysql数据库密码相关方法
方法一: 在my.ini的[mysqld]字段加入:skip-grant-tables重启mysql服务,这时的mysql不需要密码即可登录数据库 然后进入mysqlmysql>use mysq ...
- flex 正则 验证
验证数字:^[-]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(|[-][-]*)$ 验证有两位小数的正 ...
- 【Lua】Debian环境下openresty的安装
OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器,它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项. OpenResty 通 ...
- Xshell连接Linux下Oracle无法回退的解决办法
使用Xshell 连接远程Linux 数据库服务器,当切换到sqlplus 控制台时,输入错误字符的时候,使用回退键修改时,显示^H. 解决方法: 在控制太命令中输入stty erase ^H 回车就 ...
- 【java】:生成excel
//生成报表公用方法 //excelName: 生成的文件名 //list:时间/日期/描述 //listSelectFiled: 标题 //showContent : 文件内容bean //生成 ...
- 存储构造题(Print Check)
连接:Print Check 题意:n行m列的矩阵,有k次涂色,每一涂一行或者一列,求最后的涂色结果. 从数据的大小看,暴力肯定要TLE: 问题是如何存储数据. 首先:我们只要最后的涂色结果. 其次: ...
- Failed to execute goal on project MakeFriends: Could not resolve dependencie The POM for .chengpai.jtd:jtd-service-api:jar:1.0-SNAPSHOT is missing, no dependency information available
本笔者在学习maven的基础,然后建立了一个maven的项目,然后想对其进行依赖操作,pom.xml进行依赖操作时候出现了这样的错误,说是找不到这个依赖的包,但是事实上已经导入了这个包. 同时,也在m ...
- Mysql --分区表(6)Hash分区
HASH分区 HASH分区主要用来分散热点读,确保数据在预先确定个数的分区中尽可能平均分布.对一个表执行HASH分区时,MySQL会对分区键应用一个散列函数,以此确定数据应当放在N个分区中的哪个分区 ...