c++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的:void f(int n);
std::thread t(f, n + 1);
t.join();但是线程毕竟是属于比较低层次的东西,有时候使用有些不便,比如我希望获取线程函数的返回结果的时候,我就不能直接通过thread.join()得到结果,这时就必须定义一个变量,在线程函数中去给这个变量赋值,然后join,最后得到结果,这个过程是比较繁琐的。c++11还提供了异步接口std::async,通过这个异步...
文章目录
std::async、std::future创建后台任务并返回值std::asyncstd::futurestd::launch
std::packaged_taskstd::promisestd::async、std::future创建后台任务并返回值
std::async
std::async是一个函数模板,用来启动一个异步任务,启动起来一个异步任务之后,它返回一个std::future对象,这个对象是个类模板。异步任务: 自动创建一个线程,并开始 执行对应的线程入口函数,它返回一个std::future对象,这个std::future对象中就...
C++98 标准中并没有线程库的存在,直到 C++11 中才终于提供了多线程的标准库,提供了管理线程、保护共享数据、线程间同步操作、原子操作等类。多线程库对应的头文件是 #include <thread> ,类名为 std::thread 。
int testFun(int numb)
{cout << "function is runing" << endl;cout << "this thread ID:"<<std::this_thread::get_id() << endl;std::chrono::seconds dura(5);std::this_thread::sleep_for(dura);return ++numb;
}调...
1 std:: async与std::thread的区别
1)std:: async:主要是用于创建一个异步任务,当系统资源紧张时有可能不创建线程或者创建线程失败。并且当枚举宏为std::launch::defered时,肯定不会创建线程并且只有调用get或者wait才开始执行异步任务。2)std::thread:而thread是必定创建线程。当然系统资源紧张也会可能创建失败。3)std::async函数模板更加容易拿到线程函数的返回值,所以更想要拿返回值的,可以使用std::async。4)若不是...
C++11中的std::async是个模板函数。std::async异步调用函数,在某个时候以Args作为参数(可变长参数)调用Fn,无需等待Fn执行完成就可返回,返回结果是个std::future对象。Fn返回的值可通过std::future对象的get成员函数获取。一旦完成Fn的执行,共享状态将包含Fn返回的值并ready。
std::async有两个版本:
1.无需显示指定启动策略,自动选择,因此启动策略是不确定的,可能是std::launch::async,也可能是std::launch::deferred,或...
async_wait传参数调用回调函数通过bind方式绑定,可以用lambda表达式代替
本来调用一次print就会失效,可以通过expires_at定义下一次的失效时间来多次执行print
需要占一位参数error_code是系统参数
async_wait形参只有一个所以需要bind绑定函数和函数参数以lambda方式效率更高:回调绑定的参数生命周期一定要足够长保证在run能够运行
如以下情况run会调用智能指针的野指针因为已经超过出了智能指针的生命周期,但不一定会出错这也...
上一篇:《深入应用C++11》笔记-互斥量std::mutex、锁std::lock_guard
std::async和std::future
std::async()是一个接受回调函数或函数对象作为参数的函数模板,并可以异步执行它们。通过这个异步接口可以很方便的获取线程函数的执行结果,std::async会自动创建一个线程去调用线程函数,它返回一个std::future。
std::future中存储了线程函数返回的结果,当我们需要线程函数的结果时,直接从future中获取。std::async首先解耦...