当前位置: 首页 > news >正文

c++ future 使用详解

c++ future 使用详解

std::future

  • 头文件 #include <future>

  • 类模板,定义如下:

    template<class T> class future;
    template<class T> class future<T&>;
    template<>        class future<void>;
    
  • 作用:提供了一种机制,可以获取异步任务的执行结果、等待异步任务的完成、检查异步任务的状态等操作。

  • 使用:通常情况下,与 std::async,std::promise 和 std::packaged_task 结合使用。

std::future 成员函数

  • get:获取任务的执行结果;
  • wait:等待结果变得可用;
  • wait_for:等待结果,如果在指定的超时间隔后仍然无法得到结果,则返回;
  • wait_until:等待结果,如果在已经到达指定的时间点时仍然无法得到结果,则返回。

wait_for wait_until

  • 函数原型:

    template<class Rep, class Period>
    std::future_status wait_for(const std::chrono::duration<Rep,Period>& timeout_duration) const;template<class Clock, class Duration>
    std::future_status wait_until( const std::chrono::time_point<Clock,Duration>& timeout_time) const;
    
    • timeout_duration:要阻塞的最大时长。
    • timeout_time:要阻塞到的最大时间点。
    • 返回值:std::future_status:
      • future_status::deferred:函数被延迟运行,结果将仅在调用 wait 或者 get 时进行计算;
      • future_status::ready:结果已经就绪;
      • future_status::timeout:结果经过指定的等待时间后仍未就绪;
  • 推荐使用稳定时钟,避免因系统时间调整而受到影响。

示例代码

  • 与 std::async,std::promise 和 std::packaged_task 的结合使用:

    #include <iostream>
    #include <future>
    #include <thread>int main()
    {// 来自 packaged_task 的 futurestd::packaged_task<int()> task([]() { return 100; });// 获取 futurestd::future<int> f1 = task.get_future();// 在线程上运行std::thread(std::move(task)).detach();// 来自 async 的 futurestd::future<int> f2 = std::async(std::launch::async, []() { return 200; });// 来自 promise 的 futurestd::promise<int> p;std::future<int> f3 = p.get_future();std::thread([&p] { p.set_value_at_thread_exit(300); }).detach();std::cout << "Waiting..." << std::flush;f1.wait();f2.wait();f3.wait();std::cout << "Done!\nResults are: ";std::cout << f1.get() << ' ' << f2.get() << ' ' << f3.get() << '\n';
    }
    

相关文章:

c++ future 使用详解

c future 使用详解 std::future 头文件 #include <future>。 类模板&#xff0c;定义如下&#xff1a; template<class T> class future; template<class T> class future<T&>; template<> class future<void>;作用&#xff…...

好用的C C++ 日志宏 OutputDebugStringA 写到文件或界面

日志宏 #include <cstdio> #define OUTPUT_DEBUG_STRING(fmt, ...) do { \char szOutMsgFinal[10240] {0}; \std::snprintf(szOutMsgFinal, sizeof(szOutMsgFinal), "[%s|%d] " fmt "\n", __func__, __LINE__, ##__VA_ARGS__); \OutputDebugString…...

如何在ModelScope社区魔搭下载所需的模型

本篇文章介绍如何在ModelScope社区下载所需的模型。 若您需要在ModelScope平台上有感兴趣的模型并希望能下载至本地&#xff0c;则ModelScope提供了多种下载模型的方式。 使用Library下载模型 若该模型已集成至ModelScope的Library中&#xff0c;则您只需要几行代码即可加载…...

NLP在网安领域中的应用(初级)

NLP在网安领域的应用 写在最前面1. 威胁情报分析1.1 社交媒体情报分析&#xff08;后面有详细叙述&#xff09;1.2 暗网监测与威胁漏洞挖掘 2. 恶意软件检测2.1 威胁预测与趋势分析 3. 漏洞管理和响应4. 社交工程攻击识别4.1 情感分析与实时监测4.2 实体识别与攻击者画像构建4.…...

03.UDP套接字与原始套接字

UDP套接字 注意在UDP套接字中,要使用recvfrom和sendto API: recvfrom: 接收数据包,并存储源地址(UDP) 函数原型: int WSAAPI recvfrom([in] SOCKET s,[out] char *buf,[in] int len,[...

「NLP+网安」相关顶级会议期刊 投稿注意事项+会议等级+DDL+提交格式

「NLP网安」相关顶级会议&期刊投稿注意事项 写在最前面一、会议ACL (The Annual Meeting of the Association for Computational Linguistics)IH&MMSec (The ACM Workshop on Information Hiding, Multimedia and Security)CCS (The ACM Conference on Computer and Co…...

Python开源项目RestoreFormer(++)——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践

有关 Python 和 Anaconda 及 RestoreFormer 运行环境的安装与设置请参阅&#xff1a; Python开源项目CodeFormer——人脸重建&#xff08;Face Restoration&#xff09;&#xff0c;模糊清晰、划痕修复及黑白上色的实践https://blog.csdn.net/beijinghorn/article/details/134…...

设计模式 -- 命令模式(Command Pattern)

命令模式&#xff1a;一种数据驱动的设计模式也属于行为型模式&#xff0c;请求以命令的形式包裹在对象中&#xff0c;并传给调用对象。调用对象寻找可以处理该命令的合适的对象&#xff0c;并把该命令传给相应的对象&#xff0c;该对象执行命令。你认为是命令的地方都可以使用…...

【数据分享】2021-2023年我国主要城市逐月轨道交通运营数据

以地铁为代表的轨道交通是大城市居民的主要交通出行方式之一&#xff0c;轨道交通的建设和运营情况也是一个城市发展水平的重要体现。本次我们为大家带来的是2021-2023年我国主要城市的逐月的轨道交通运营数据&#xff01; 数据指标包括&#xff1a;运营线路条数&#xff08;条…...

大数据-之LibrA数据库系统告警处理(ALM-12034 周期备份任务失败)

告警解释 周期备份任务执行失败&#xff0c;则上报该告警&#xff0c;如果下次备份执行成功&#xff0c;则恢复告警。 告警属性 告警ID 告警级别 可自动清除 12034 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称。 RoleName 产生告警的角色…...

tx-前端笔试题记录

目录 目录 1.你最熟悉的前端框架是什么说说你对它的理解。 2.请简单实现一下js对象深度拷贝。 3.CSS 有几种方法实现垂直水平居中?请简要写一下。 4.这段程序执行之后控制台会打印什么内容? 5.下列程序的输出结果是多少?为什么? 6.有ABCDE 五个火车站&#xff0c;单向…...

详解Redis持久化(上篇——RDB持久化)

Redis持久化的作用和意义 Redis 持久化是一种机制&#xff0c;用于将内存中的数据写入磁盘&#xff0c;以保证数据在服务器重启时不会丢失。持久化是为了解决内存数据库&#xff08;如 Redis&#xff09;在服务器关闭后&#xff0c;数据丢失的问题。 Redis 持久化的主要作用和…...

爬虫常见风控

一.ip风控 单位时间内接口访问频率。 二.设备指纹风控 设备注册时候设备特征是否完整&#xff0c;信息主要包含硬件、网络、系统三部分。 硬件属性&#xff1a;设备品牌、型号、IMEI&#xff08;国际移动设备识别码&#xff09;、处理器、内存、分辨率、亮度、摄像头、电池、…...

华为ensp:边缘端口并启动BUDU保护

如上图前提是三个交换机都做了rstp&#xff0c;则在边缘的地方做 边缘端口并启动BUDU保护&#xff0c;也就是我用绿色圈出来的地方 边缘1 进入交换机的系统视图 interface e0/0/3 进入接口 stp edged-port enable quit 再退回系统视图 stp bpdu-protection 这样就可以了…...

分布式id生成数据库号段算法的golang实现

分布式id生成数据库号段算法的golang实现 介绍项目结构使用说明核心流程说明1. 定义id生成器结构体2. id生成器共有Monitor&#xff0c;GetOne, Close三个对外暴露的方法。3. 数据表结构 参与贡献 介绍 项目地址&#xff1a;gitee&#xff1b;github 本项目主要利用go语言(go1…...

【算法 | 模拟No.4】AcWing 756. 蛇形矩阵 AcWing 40. 顺时针打印矩阵

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【AcWing算法提高学习专栏】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&a…...

数据——最为直接的答案

身处于这样一个数字化快速发展、竞争强烈的时代&#xff0c;不管是企业还是个人&#xff0c;大家都需要及时获取前沿动态信息&#xff0c;密切关注市场的变化。但是&#xff0c;在不计其数的企业中&#xff0c;到底行业top 是哪些企业引领潮流&#xff1f; 只有数据能告诉你最…...

php加密解密的用法(对称加密,非对称加密)

加密和摘要的区别 ***摘要&#xff1a;是从已知的数据中&#xff0c;通过摘要计算出一个值&#xff0c;一个数据对应一个或多个摘要的值 *** 比如&#xff1a;md5 和 sha1 sha256 hash 就是得到一个特定的值 &#xff0c;同一个数据得到的md5 是一样的&#xff0c;不会改变的 比…...

优秀智慧园区案例 - 中建科技产业园(中建·光谷之星),万字长文解析先进智慧园区建设方案经验

一、项目背景 中建科技产业园&#xff08;中建光谷之星&#xff09;&#xff0c;位于武汉光谷中心城、中国&#xff08;湖北&#xff09;自贸试验区武汉片区双核心区&#xff0c;光谷发展主轴高新大道北侧&#xff0c;建筑面积108万平米&#xff0c;是中建三局“中建之星”和“…...

Python基础详解教程------目录大纲

Python基础详解教程------让编程简单 目录 第一章、python基本概念规范... 5 1.1方法(Method)与函数(Function) 5 1.2类(Class)与函数(Function) 6 1.3变量(Variable)与参数(Parameter)及形参与实参... 7 1.4变量(Variable)与属性(Attribute)及property. 8 1.5对象(Objec…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...

作为点的对象CenterNet论文阅读

摘要 检测器将图像中的物体表示为轴对齐的边界框。大多数成功的目标检测方法都会枚举几乎完整的潜在目标位置列表&#xff0c;并对每一个位置进行分类。这种做法既浪费又低效&#xff0c;并且需要额外的后处理。在本文中&#xff0c;我们采取了不同的方法。我们将物体建模为单…...

华为OD机考- 简单的自动曝光/平均像素

import java.util.Arrays; import java.util.Scanner;public class DemoTest4 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint[] arr Array…...

VASP软件在第一性原理计算中的应用-测试GO

VASP软件在第一性原理计算中的应用 VASP是由维也纳大学Hafner小组开发的一款功能强大的第一性原理计算软件&#xff0c;广泛应用于材料科学、凝聚态物理、化学和纳米技术等领域。 VASP的核心功能与应用 1. 电子结构计算 VASP最突出的功能是进行高精度的电子结构计算&#xff…...