future wait_for()成员、shared_future

future wait_for()成员

wait_for():等待其异步操作操作完成或者超出等待,用于检查异步操作的状态。wait_for()可以接受一个std::chrono::duration类型的参数,它表示等待的最大时间,会返回一个std::future_status枚举值(枚举类型)。在最大时间范围内,wait_for()会尝试等待异步操作完成。如果wait_for()执行前或者wait_for()等待最大时间内异步任务完成,函数就会返回std::future_status::ready。如果wait_for()等待时间超过最大时间,函数就会返回std::future_status::timeout,表示等待超时。如果在调用async时使用了std::launch::deferred参数,那么函数将在future调用get()时在主线程中执行,而调用wait_for()会返回std::future_status::deferred,表示线程被延迟执行了。

#include<iostream>
#include<thread>
#include<future>
using namespace std;
int mythread(int i)
{std::chrono::milliseconds dura(5000);//std::this_thread::sleep_for(dura);//休息5秒return i;
}
int main()
{future<int> myfu = async<int(int)>(mythread, 5);std::future_status status = myfu.wait_for(std::chrono::seconds (6));//等待最长6秒if (status == std::future_status::ready){cout << "我准备好了" << endl;}else if (status == std::future_status::ready){cout << "超时了" << endl;}else if (status == std::future_status::deferred){cout << "延迟执行了" << endl;}cout << myfu.get() << endl;}

shared_future

std::shared_future 是 C++ 标准库中的一个模板类,它类似于 std::future,但允许多个线程或对象共享对异步操作结果的访问。std::shared_future 对象通常与 std::promise、std::packaged_task 对象一起使用,用于在多线程环境中安全地共享异步操作的。将返回的future对象移动到shared_future中,这样就可以对其中的数据进行多次的访问和复制了。可以使用valid()成员函数判断future对象是否执行了移动语义,它将返回一个bool值,如果future中有有效值就会返回true,没有返回false。shared_future对象可以多次调用get()函数对数据进行访问。同时future有专门的shared()成员函数,可以返回shared_future对象,用于对shared_future赋值。

#include<iostream>
#include<thread>
#include<future>
using namespace std;
int mythread(int i)
{return i;
}
int main()
{packaged_task<int(int)> pack(mythread);thread tl(std::ref(pack),5);tl.join();future<int> myfu = pack.get_future();shared_future<int> result = myfu.share();cout << result.get() << endl;}

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

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

相关文章

完美解决Windows10下-更换JDK环境变量后,在cmd下执行仍java -version然出现原来版本的JDK的问题

一、错误场景预演 本人欲将 JDK 1.8 通过安装包的方式升级为 JDK 22。 本地旧版本&#xff1a;1.8.0_221预升级版本&#xff1a;22.0.1 1.1、查看本地旧版本 在配置环境变量之前&#xff0c;首先我们要明确&#xff0c;本地存在旧版本&#xff0c;如果本地没有 Java&#x…

MFC通过继承现有控件自定义控件

在MFC 自定义控件&#xff0c;可以通过继承MFC提供的控件类&#xff08;如CButton、CEdit、CListBox等&#xff09;并重写其成员函数和消息处理函数来实现。 以下是一个基本的步骤指南&#xff0c;用于在MFC中创建自定义控件&#xff1a; 确定要继承的基类&#xff1a; 首先…

vm16安装最新版本的ubuntu虚拟机,并安装g++的步骤记录

背景 低版本的ubuntu安装G一直不成功&#xff0c;干脆安装最新版的 官网下载 bing搜索ubuntu 下载完成 vm16新建虚拟机 一直下一步&#xff0c;安装完成 终端输入命令 sudo apt-get update ᅟᅠ       sudo apt install gcc ᅟᅠ      sudo apt install g

树莓派点亮FPGA小灯

树莓派点亮FPGA小灯 引言&#xff1a; ​ 本次实验的目的是通过树莓派和FPGA之间的串口通信&#xff0c;控制FPGA开发板上的小灯。实验将展示如何使用树莓派发送特定的字符信号&#xff0c;通过串口传输至FPGA&#xff0c;并在FPGA上实现逻辑解析&#xff0c;以点亮指定的小灯。…

Vim常用快捷键

这个是我的草稿本记录一下防止丢失&#xff0c;以后有时间进行整理 0 或功能键[Home]这是数字『 0 』&#xff1a;移动到这一行的最前面字符处 (常用)$ 或功能键[End]移动到这一行的最后面字符处(常用)G移动到这个档案的最后一行(常用)nGn 为数字。移动到这个档案的第 n 行。例…

【QT】QT背景介绍

本专栏内容为&#xff1a;QT学习专栏 通过本专栏的深入学习&#xff0c;你可以了解并掌握QT。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;QT &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f…

灰度图恢复(C++)

思路&#xff0c;数字出现的次数与要统计的行列向匹配&#xff0c;函数表达式为 sum row*mcol 1; 例如初始出现次数为255 2&#xff0c;即255出现2次&#xff0c;则{0&#xff0c;0}、{0&#xff0c;1}都为255 #include <iostream> #include <sstream> #include…

3D分子生成的定制扩散框架 MolDiff - 评测

MolDiff模型是一种考虑分子键生成的3D分子生成的新模型。MolDiff是清华大学智能产业研究院马剑竹课题组发表在PMLR 2023的工作&#xff0c;第一作者是Xingang Peng&#xff0c;文章题目为&#xff1a;《 Addressing the Atom-Bond Inconsistency Problem in 3D Molecule Genera…

Rust中的链式调用方法

在Rust编程语言中&#xff0c;链式调用是一种流行的编程模式&#xff0c;它允许开发者以流畅、连续的方式调用多个方法。这种风格不仅提高了代码的可读性&#xff0c;而且使得复杂的操作可以串联在一起&#xff0c;形成一个清晰、简洁的语句。在Rust中&#xff0c;链式调用主要…

【Android】Kotlin学习之数据容器 -- 集合

一. 定义 List : 是一个有序列表, 可通过下标访问元素. 元素可以在list中出现多次, 元素可重复 Set : 是元素唯一的集合, 一般来说Set中元素的顺序并不重要, 无序集合. Map : 是一组键值对, 键是唯一的, 每个键刚好映射到一个值, 值可以重复 二. 集合创建 三. 示例 mutabl…

OSTE-Web-Log-Analyzer:基于Python的Web服务器日志自动化分析工具

关于OSTE-Web-Log-Analyzer OSTE-Web-Log-Analyzer是一款功能强大的Web服务器日志自动化分析工具&#xff0c;该工具专为安全研究人员设计&#xff0c;能够使用Python Web日志分析工具&#xff08;Python Web Log Analyzer&#xff09;帮助广大研究人员以自动化的形式实现Web服…

推导 模型矩阵的逆转置矩阵求运动物体的法向量

一个物体表面的法向量如何随着物体的坐标变换而改变&#xff0c;取决于变换的类型。使用逆转置矩阵&#xff0c;可以安全地解决该问题&#xff0c;而无须陷入过度复杂的计算中。 法向量变化规律 平移变换不会改变法向量&#xff0c;因为平移不会改变物体的方向。 旋转变换会改…

栈和队列的相互实现

1. 两个队列实现栈. - 力扣&#xff08;LeetCode&#xff09; 队列的特点是先进先出&#xff0c;而栈的特点是后进先出&#xff08;先进后出&#xff09;&#xff0c;也就是说重点在于利用两个队列来改变“出”的顺序。 假设我们在进行入栈操作的时候将数据依次入到一个队列中…

python如何单步调试

Python怎么单步调试&#xff1f;下面给大家介绍一下单步调试&#xff1a; 方法一&#xff1a;执行 python -m pdb myscript.py (Pdb) 会自己主动停在第一行。等待调试&#xff0c;这时你能够看看帮助。 方法二&#xff1a;在所调试程序的开头中&#xff1a;import pdb 并在你…

多线程编程中的隐形杀手:volatile关键字

概述 C中std::mutex本身是一个非volatile类型的对象&#xff0c;但是它保护的共享资源可能需要被volatile修饰&#xff0c;以确保对该资源的修改在不同线程之间的可见性。这种情况通常发生在多线程访问共享数据时&#xff0c;这些数据可能被异步修改&#xff0c;且修改的发生时…

【Vue3笔记03】Vue3项目工程中使用vue-router路由

这篇文章,主要介绍Vue3项目工程中如何使用vue-router路由。 目录 一、vue-router路由 1.1、下载vue-router路由 1.2、创建router.js文件 1.3、main.js配置路由

民航电子数据库:数据库的备份与恢复

目录 前言备份库级逻辑备份示例 恢复库级的逻辑恢复示例 前言 民航电子数据库的备份与恢复 备份 库级逻辑备份 备份目标库下所有的对象 。 因此 &#xff0c;库级逻辑备份需要由备份库的管理员&#xff08;SYSDBA&#xff09;登录至备份目标库进行操作。 语法格式 &#xff1…

商家转账到零钱怎么开通?一步步教你玩转微信营销新利器

在数字化营销日新月异的今天&#xff0c;微信支付凭借其便捷、安全的特点&#xff0c;成为了商家不可或缺的支付工具。而其中的“商家转账到零钱”功能&#xff0c;更是为商家提供了一个全新的营销利器。今天&#xff0c;我们就来详细解读一下如何开通这一功能&#xff08;我处…

怎么制作流程图?介绍制作方法

怎么制作流程图&#xff1f;在日常生活和工作中&#xff0c;流程图已经成为我们不可或缺的工具。无论是项目规划、流程优化&#xff0c;还是学习理解复杂系统&#xff0c;流程图都能帮助我们更直观地理解和表达信息。然而&#xff0c;很多人可能并不清楚&#xff0c;其实制作流…

通过 Java 操作 redis -- zset 有序集合基本命令

目录 使用命令 zadd&#xff0c;zrange 使用命令 zcard 使用命令 zrem 使用命令 zscore 使用命令 zrank 关于 redis zset 有序集合类型的相关命令推荐看Redis - Zset 有序集合 要想通过 Java 操作 redis&#xff0c;首先要连接上 redis 服务器&#xff0c;推荐看通过 Jav…