目的:使用async的目的是为了简化thread,并且可以不需要每次都创建线程。
作用:
1、指定未来某个时间段给出结果或做某件事,中间过程并不关心
2、async可以处理计算量非常大,非常复杂的查找
函数接口:
template<typename _Fn, typename... _Args>
future<typename result_of<_Fn(_Args...)>::type>
async(launch __policy, _Fn&& __fn, _Args&&... __args)
这个是一个函数模板,具体的参数如下:
launch __policy:函数执行的方式,默认两种方式
/// Launch code for futures
enum class launch
{
async = 1, //异步启动,在调用std::async()时创建一个新的线程以异步调用函 数,并返回future对象;
deferred = 2//延迟启动,在调用std::async()时不创建线程,直到调用了future对象的get()或wait()方法时,才创建线程;
};
_Fn&& __fn :函数名称
_Args&&... __args:函数的参数
example:不比比直接上代码!
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <future>
#include <unistd.h>
using namespace std;
void test(int t)
{
std::cout<<"1111"<<'\n';
}
void fun1()
{
sleep(1);
std::cout << "fun1..." << std:: endl;
}
void fun2(int n)
{
sleep(2);
std::cout << "fun2 n:"<<n << std::endl;
}
std::string fun3(const std::string& str)
{
cout << str << endl;
return str;
}
int main(){
std::async(std::launch::async,test,1);
auto pfun1 = std::async(std::launch::async, fun1);
auto pfun2 = std::async(std::launch::async, fun2,2);
auto pfun3 = std::async(std::launch::async, fun3,"hello async");
// lambda 表达式
auto pfun4 = std::async(std::launch::async,[] {
cout << "pfun4" << endl;
});
sleep(10);
}
结果如下:不用多说,直接拿来就用!
1111
hello async
pfun4
fun1...
fun2 n:2