C++线程处理函数的返回值

引言

关于线程处理函数,常见的可能是返回值为void类型,那线程处理函数是否能定义自己想要的返回值类型呢,这里请看下面的说明。

C++线程返回值

  • 应用环境
    • 1、传统的方式获取线程返回值
    • 2、使用C++ Promise和future方式
    • 3、promise和future介绍


应用环境

通常主线程某些任务需要通过子线程完成数据处理之后才能继续执行;传统的方式就是主线程标志位给到子线程去,然后主线程这边采用循环等待的方式去等标志是否已经完成标示。另外一种方式就是使用c++11 promis 和future来完成


1、传统的方式获取线程返回值

代码如下:

#include <iostream>       
#include <thread>         
#include <future>    
#include <QDebug>
using namespace std;
void thread_old(bool pRet)
{
qDebug() << QString(“thread_old is called.) << “\n”;
pRet = true;
}void main()
{
// use the old way
bool bReturn = false;
thread threadOld(thread_old, &bReturn);
threadOld.detach();
while (true)
{
if (bReturn)
{
qDebug() << QString(“thread_old is return) << “\n”;
break;
}
}
}

输出结果如下:
在这里插入图片描述

2、使用C++ Promise和future方式

代码如下:

#include <iostream>       
#include <thread>         
#include <future>    
#include <QDebug>
using namespace std;
void thread_new(promise<bool> *bPromise)
{
qDebug() << QString(“thread_new is called.) << “\n”;
bPromise->set_value(true);
}void main()
{
// the new way
promise<bool> bPromise;
future<bool> bFuture = bPromise.get_future();
thread threadNew(thread_new, &bPromise);
threadNew.detach();
qDebug() << QString(“future val:%1).arg(bFuture.get()) << “\n”;
}

输出结果如下:
在这里插入图片描述


3、promise和future介绍

  • std::future是一个类模板(class template),其对象存储未来的值,一个std::future对象在内部存储一个将来会被赋值的值,并提供了一个访问该值的机制,通过get()成员函数实现。在此之前试图在get()函数可用之前通过它来访问相关的值,那么get()函数将会阻塞,直到该值可用。
  • std::promise也是一个类模板,其对象有可能在将来会被人为赋值,每个std::promise对象有一个对应的std::future对象,一旦由std::promise对象设置,std::future将会对其赋值。
  • std::promise对象与其管理的std::future对象共享数据。

总结

结合这篇文章,可以看出通过参数可以将想要的值获取,至于能否通过指定返回值类型返回想要的数据这里还是不太清楚,应该是不可以。还是采用参数传回想要的数据吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为在欧注册HUAWEI ARK OS商标或为海外版操作系统命名;联通电信正探索合并?汽车共享品牌car2go近宣布退出中国……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 一加 7 Pro &#xff…

ip访问次数统计 nginx_PHP实现IP访问限制及提交次数的方法详解

一、原理提交次数是肯定要往数据库里写次数这个数据的&#xff0c;比如用户登陆&#xff0c;当用户出错时就忘数据库写入出错次数1&#xff0c;并且出错时间&#xff0c;再出错写2&#xff0c;当满比如5次时提示不允许再登陆&#xff0c;请明天再试&#xff0c;然后用DateDiff计…

C++容器deque的用法

目录 1.deque容器概念 2.deque对象的构造 2.1deque对象的默认构造 2.2deque对象的带参数构造 3.deque头部和末尾的添加移除操作 4.deque的数据存取 5.deque与迭代器 6.deque的赋值 7.deque的大小 8.deque的插入 9.deque的删除 1.deque容器概念 deque容器概念 deque是…

AI时代,中国技术创新如何弯道超车?

2019 年 5 月 26 日 - 27 日&#xff0c;杭州国际博览中心&#xff0c;由工信部人才交流中心指导&#xff0c;CSDN 和数字经济人才发展中心主办的 CTA 核心技术及应用峰会圆满落下帷幕。本次大会聚焦机器学习、知识图谱等 AI 领域的热门技术&#xff0c;关注技术在行业中的实践…

JBOSS7启动与关闭

1.启动 进入Jboss的bin目录下 通过以下命令启动jboss ./standalone.sh启动没有问题&#xff0c;但是当你按你ctrl C退出后&#xff0c;jboss服务也关闭了&#xff0c;所以我们要使用后台启动方式&#xff1a; nohup ./standalone.sh&查看Jboss启动进程&#xff1a; tai…

容器云常见安全威胁与防范 | 技术干货

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;除了应对常见云平台和传统数据中心常见的安全威胁&#xff0c;容器云平台还存在一些自…

开启灯光就是近光吗_有用!科目三灯光模拟操作大全

科三考试第一项就是灯光模拟考试&#xff0c;要求考生在5秒之内根据相关语音播报完成相应操作。不少学员在这一项中出错&#xff0c;以至于科三考试还没开出几米就挂了&#xff01;今天通妹特地整理了灯光操作相关技巧&#xff0c;希望大家顺利通过科三第一关&#xff01;语音提…

vmware安装问题:Microsoft Runtime DLL安装程序未能完成安装

文章目录一、vmware安装问题&#xff1a;Microsoft Runtime DLL安装程序未能完成安装1.1 在输入%temp%1.2. 找到{ADC3121A-3EBA-4016-AF64-00B8FE017080}~setup结尾是~setup1.3. 打开该文件夹选择安装程序即可正常安装。一、vmware安装问题&#xff1a;Microsoft Runtime DLL安…

雾计算精华问答 | 雾计算与云计算的区别?

物联网对于数据的处理能力要求很高&#xff0c;怎么能够从庞大的数据海中挖掘一些有价值的信息对于物联网的发展至关重要&#xff0c;因此云计算&#xff0c;雾计算&#xff0c;边缘计算等等都将发挥其左右。今天先让我们来了解一下雾计算吧。1Q&#xff1a;雾计算是如何构成的…

【解决】-bash: ftp: command not found

今天在centos上使用ftp命令连接本机的FTP服务器&#xff08;本机FTP服务使用Vsftpd搭建&#xff09;&#xff0c;出现如下的错误提示&#xff1a;-bash: ftp: command not found 查询相关资料&#xff0c;发现很有可能是FTP命令没有安装。 通过yum方式安装FTP命令: yum insta…

kodi pvr 不能安装_「保姆级教程」家庭影音多媒体中心第5节—KODI18安装/设置IPTV...

一、本章前言&#xff1a;上一章节万晓博SEO带领大学习安装了kodi18播放群晖NAS或者本地视频教程&#xff0c;本节课我们讲讲如何使用kodi播放器看IPTV央视/地方卫视频道&#xff0c;我们遐想下&#xff0c;如果我们使用kodi播放IPTV&#xff0c;这样既可以播放群晖nas或者本地…

使用云原生buildpacks将你的代码转换成Docker Image | 技术干货

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;七年前buildpack技术开源之时&#xff0c;我们就看到了这项技术将大大简化应用的发布过…

Windiws环境安装轻量级文件服务器ftpserver

Windiws环境安装轻量级文件服务器ftpserver 文章目录1. 在线下载&#xff1a;2. 解压3. 以管理员身份运行4. 启动5. 浏览器验证6. 输入账号和口令7. 创建测试文件8. 验证效果图1. 在线下载&#xff1a; 点击即可下载&#xff1a;http://learning.happymmall.com/ftpserver/FTP…

每年一波FPGA系列新品,这次Achronix专为AI/ML应用打造……

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;近日&#xff0c;美国eFPGA IP企业Achronix在京召开产品发布会&#xff0c;推出了全新…

折线图x轴的日期会超出_matplotlib之折线图(代码+解析)

作者&#xff1a;禹棋赢本文推荐一个仓库Plot-Pictures-Tutorial-for-Paper​github.com该仓库会总结论文中常见图形的画法&#xff0c;本节介绍折线图&#xff1a;一、折线图绘制折线图我们通常使用plot函数画曲线&#xff08;折线&#xff09;。每一个plot函数对应一条曲线&a…

K8S精华问答 | Kubernetes集群常见问题

作为是Google开源的容器集群管理系。在Docker技术的基础上&#xff0c;为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能&#xff0c;提高了大规模容器集群管理的便捷性。今天&#xff0c;我们就来看看关于k8s的精华问答吧。1Q:什么是Kubernetes&…

Linux使用yum install 安装程序时,提示“另外一个程序锁定了 yum;等待它退出……”

Linux使用yum install 安装程序时&#xff0c;提示“另外一个程序锁定了 yum&#xff1b;等待它退出……” https://www.cnblogs.com/qf123/p/9909790.html 原因&#xff1a; yum命令一次只能安装一个软件&#xff0c;所以当你下载安装第二个软件包时&#xff0c;系统进程锁会…

小鹏汽车吴新宙:要做全国第一 | 人物志

戳蓝字“CSDN云计算”关注我们哦&#xff01;人物志&#xff1a;观云、盘点、对话英雄。以云计算风云人物为核心&#xff0c;聚焦个人成长、技术创新、产业发展&#xff0c;还原真实与鲜活&#xff01;在国内自动驾驶汽车领域&#xff0c;成立于2014年的小鹏汽车&#xff0c;因…

验证布局中控件的父窗口

验证布局中的控件的父窗口概述示例开发环境项目运行结果结论番外概述 平时在创建一个窗口类的子空间时&#xff0c;一般需要先创建布局&#xff0c;将子控件添加到窗口的布局中。子控件没有显示的指定父窗口时&#xff0c;那么这个布局中的控件的父窗口是布局还是这个窗口类呢…

Centos6.8安装Nginx+域名转发

2分钟搭建企业轻量级反向代理服务器 文章目录一、linux 环境 安装nginx二、需求分析下载/解压/启动tomcat2.1 需求分析2.2 Linux环境下载和配置Tomcat三、nginx域名转发场景13.1 编辑nginx配置文件3.2 创建配置文件中的目录3.3 创建一个配置文件四、编辑配置文件添加映射信息4.…