1、使用future
写一段简单的代码要同步另一个线程的数据
void thread1()
{
//操作耗时
//返回
}
void main()
{
thread th(thread1)
wait 等待信号返回
}
以上是正常的操作,可以等待信号量释放返回,这时候是同步操作的,两个线程之间有等待的状态,std::future 同样会有等待的状态,不同的是:
1. std::future 操作相对简单,看不到信号量 2. 只要获取值会自动阻塞
以上两点这是c++11 相对于比较高级的地方。使用c++11 的future和 async 异步来包装函数。
2、源码测试future 和 async,注意async的同步等待内部操作实际上是异步的。
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
#include
#include "c_time.h"
typedef struct s_param
{
std::promise v_i;
std::promise v_str;
}s_param;
std::string syncdata(std::string strin)
{
std::this_thread::sleep_for(std::chrono::milliseconds(3000));
//param.str_out = param.str_in+"out";
return strin+"_out";
}
int main() {
std::promise promiseObj;
std::future futureObj = promiseObj.get_future();
s_param param;
std::string s = "in";
std::future ff1 = param.v_i.get_future();
std::future ff2 = param.v_str.get_future();
std::future ff3 = std::async(std::launch::async, syncdata, s);
std::thread th([¶m](){
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
param.v_i.set_value(100);
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
param.v_str.set_value("test");
});
c_time2 t;
std::cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?