C++多线程获取返回值的方法是什么
发表于:2025-11-18 作者:千家信息网编辑
千家信息网最后更新 2025年11月18日,本篇内容主要讲解"C++多线程获取返回值的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++多线程获取返回值的方法是什么"吧!我们通过一个例子
千家信息网最后更新 2025年11月18日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安全错误
数据库的锁怎样保障安全
小学暑假网络安全主题总结
MFCDLL连接不上数据库
上传服务器安全设置
网络安全杀毒报告
ai和网络安全的综艺节目
服务器系统信息
泉州软件开发培训班多少钱
珠海非遗数据库
四川银行微服务架构数据库
临河app软件开发培训课程
圣斗士星矢服务器更新
英国的网络安全概念股
nlog 配置数据库
网络安全攻防演练防守流程
服务器的Python解释器
中国网络安全联盟常务理事单位
我的世界服务器改模式指令
新建数据库怎么装
数据库优化主要指标
图片要不要存在数据库
阳江自主可控软件开发市价
手机软件开发 首页
命令行数据库查询表
服务器装什么管理软件
sdf数据库是什么
云服务器 美国
服务器管理操作有哪些
网络安全小报 简单
安徽取消高速 网络安全
20万左右的华为服务器