C++多线程获取返回值的方法是什么
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容主要讲解"C++多线程获取返回值的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++多线程获取返回值的方法是什么"吧!我们通过一个例子
千家信息网最后更新 2025年02月01日C++多线程获取返回值的方法是什么
本篇内容主要讲解"C++多线程获取返回值的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++多线程获取返回值的方法是什么"吧!
我们通过一个例子来说明如何实现这个需求。用多个线程计算(a+b)/ (x+y) 的值
有两种方法,分别是
1. 传统的方法:在线程间共享指针
#include#include#include#includeusing namespace std; void func2(int x, int y,int* ans) { *ans= x + y;} int main(){ //计算(a+b)/(x+y) //用三个线程,一个线程计算a+b,另一个线程计算x+y int a, b, x, y; a = 10, b = 8, x = 2, y = 4; int* sum1 = new int(0); int* sum2 = new int(0); thread t1(func2, a, b, sum1); t1.join(); thread t2(func2, x, y, sum2); t2.join(); cout << (*sum1) / (*sum2) << endl; delete sum1; delete sum2; system("pause"); return 0;}
2. C++11的方法:使用std::future和std::promise
std::future和std::promise是封装好的两个类模板,这两个类需要配合使用,他们的头文件是#include
std::future,它表示存储着一个未来会被初始化的变量。这个变量可以通过std::future提供的成员函数std::future::get()来得到。如果在这个变量被赋值之前就有别的线程试图通过std::future::get()获取这个变量,那么这个线程将会被阻塞到这个变量可以获取为止。
std::promise同样也是一个类模板,这个对象承诺在未来一定会初始化一个变量(这个变量也就是std::future中的变量)。
每一个std::promise对象都有一个与之关联的std::future对象。当std::promise设置值的时候,这个值就会赋给std::future中的对象了。
#include#include#include#include#include//std::future std::promise#include//std::ref模板传参的时候使用 void func2(int x, int y,std::promise&promiseObj) { promiseObj.set_value(x+y);} int main(){ //计算(a+b)/(x+y) //用三个线程,一个线程计算a+b,另一个线程计算x+y int a, b, x, y; a = 10, b = 8, x = 2, y = 4; int sum1, sum2; //声明一个类 std::promisepromiseObj; //将future和promise关联 std::futurefutureObj = promiseObj.get_future(); //模板传参的时候使用ref,否则传参失败 std::thread t1(func2, a, b, ref(promiseObj)); t1.join(); //获取值 sum1 = futureObj.get(); std::cout << "sum1=" << sum1 << std::endl; //不能直接复用上面的future和promise std::promisepromiseObj2; std::futurefutureObj2 = promiseObj2.get_future(); std::thread t2(func2, x, y, ref(promiseObj2)); t2.join(); sum2 = futureObj2.get(); std::cout << "sum2=" << sum2 << std::endl; std::cout << "sum1/sum2=" << sum1 / sum2 << std::endl; std::system("pause"); return 0;}
到此,相信大家对"C++多线程获取返回值的方法是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
线程
变量
方法
对象
模板
C++
时候
三个
两个
内容
关联
学习
实用
更深
也就是
传统
例子
兴趣
函数
可以通过
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
报培训班网络安全
数据库期末考试代码题
美的智能管理系统连接服务器失败
湘江鲲鹏服务器有芯片吗
手机动漫制作软件开发
今天大涨的网络安全股
为什么媒体服务器耗电最多
博途opc服务器接口的作用
全球网络安全市值最高
软件开发能办个体吗
皮卡堂服务器都叫什么名字
无法创建id服务器故障
软件开发数字化研发费
我的世界服务器卡管理不够
网络安全马克笔画的图
网络安全建设整改情况报告
计算机网络技术和机械
主机改装打印服务器
身边网络安全宣传视频
鱼虾蟹软件开发
考研调剂时一直进不去服务器
网络安全与文明主题队会
内存数据库的映射
CAD软件开发难度
磐安软件开发商
网络安全观是
软件和网络技术专业哪个好就业
数据库 断言
北京飞点网络技术有限公司
广东专业软件开发服务价格优惠