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>。 类模板,定义如下: template<class T> class future; template<class T> class future<T&>; template<> class future<void>;作用ÿ…...
好用的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平台上有感兴趣的模型并希望能下载至本地,则ModelScope提供了多种下载模型的方式。 使用Library下载模型 若该模型已集成至ModelScope的Library中,则您只需要几行代码即可加载…...
NLP在网安领域中的应用(初级)
NLP在网安领域的应用 写在最前面1. 威胁情报分析1.1 社交媒体情报分析(后面有详细叙述)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 运行环境的安装与设置请参阅: Python开源项目CodeFormer——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践https://blog.csdn.net/beijinghorn/article/details/134…...
设计模式 -- 命令模式(Command Pattern)
命令模式:一种数据驱动的设计模式也属于行为型模式,请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。你认为是命令的地方都可以使用…...
【数据分享】2021-2023年我国主要城市逐月轨道交通运营数据
以地铁为代表的轨道交通是大城市居民的主要交通出行方式之一,轨道交通的建设和运营情况也是一个城市发展水平的重要体现。本次我们为大家带来的是2021-2023年我国主要城市的逐月的轨道交通运营数据! 数据指标包括:运营线路条数(条…...
大数据-之LibrA数据库系统告警处理(ALM-12034 周期备份任务失败)
告警解释 周期备份任务执行失败,则上报该告警,如果下次备份执行成功,则恢复告警。 告警属性 告警ID 告警级别 可自动清除 12034 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称。 RoleName 产生告警的角色…...
tx-前端笔试题记录
目录 目录 1.你最熟悉的前端框架是什么说说你对它的理解。 2.请简单实现一下js对象深度拷贝。 3.CSS 有几种方法实现垂直水平居中?请简要写一下。 4.这段程序执行之后控制台会打印什么内容? 5.下列程序的输出结果是多少?为什么? 6.有ABCDE 五个火车站,单向…...
详解Redis持久化(上篇——RDB持久化)
Redis持久化的作用和意义 Redis 持久化是一种机制,用于将内存中的数据写入磁盘,以保证数据在服务器重启时不会丢失。持久化是为了解决内存数据库(如 Redis)在服务器关闭后,数据丢失的问题。 Redis 持久化的主要作用和…...
爬虫常见风控
一.ip风控 单位时间内接口访问频率。 二.设备指纹风控 设备注册时候设备特征是否完整,信息主要包含硬件、网络、系统三部分。 硬件属性:设备品牌、型号、IMEI(国际移动设备识别码)、处理器、内存、分辨率、亮度、摄像头、电池、…...
华为ensp:边缘端口并启动BUDU保护
如上图前提是三个交换机都做了rstp,则在边缘的地方做 边缘端口并启动BUDU保护,也就是我用绿色圈出来的地方 边缘1 进入交换机的系统视图 interface e0/0/3 进入接口 stp edged-port enable quit 再退回系统视图 stp bpdu-protection 这样就可以了…...
分布式id生成数据库号段算法的golang实现
分布式id生成数据库号段算法的golang实现 介绍项目结构使用说明核心流程说明1. 定义id生成器结构体2. id生成器共有Monitor,GetOne, Close三个对外暴露的方法。3. 数据表结构 参与贡献 介绍 项目地址:gitee;github 本项目主要利用go语言(go1…...
【算法 | 模拟No.4】AcWing 756. 蛇形矩阵 AcWing 40. 顺时针打印矩阵
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【AcWing算法提高学习专栏】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程&a…...
数据——最为直接的答案
身处于这样一个数字化快速发展、竞争强烈的时代,不管是企业还是个人,大家都需要及时获取前沿动态信息,密切关注市场的变化。但是,在不计其数的企业中,到底行业top 是哪些企业引领潮流? 只有数据能告诉你最…...
php加密解密的用法(对称加密,非对称加密)
加密和摘要的区别 ***摘要:是从已知的数据中,通过摘要计算出一个值,一个数据对应一个或多个摘要的值 *** 比如:md5 和 sha1 sha256 hash 就是得到一个特定的值 ,同一个数据得到的md5 是一样的,不会改变的 比…...
优秀智慧园区案例 - 中建科技产业园(中建·光谷之星),万字长文解析先进智慧园区建设方案经验
一、项目背景 中建科技产业园(中建光谷之星),位于武汉光谷中心城、中国(湖北)自贸试验区武汉片区双核心区,光谷发展主轴高新大道北侧,建筑面积108万平米,是中建三局“中建之星”和“…...
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…...
AtCoder Beginner Contest 433
AtCoder Beginner Contest 433 ABCD https://www.bilibili.com/video/BV1srUTBEEfa/ AtCoder Beginner Contest 433 https://www.bilibili.com/video/BV14xUWBYELd/ https://blog.csdn.net/2503_93669452/article/details/155140717 【实况】AtCoder Beginner Contest 433&…...
Spring Data 2026 最佳实践:简化数据访问
Spring Data 2026 最佳实践:简化数据访问别叫我大神,叫我 Alex 就好。一、引言 大家好,我是 Alex。Spring Data 作为 Spring 生态系统中的重要组成部分,一直以其简化数据访问的能力而受到开发者的喜爱。随着 Spring Data 2026 的发…...
2026最权威的十大AI辅助写作助手解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 现今,人工智能辅助论文写作在学术研究里已渐渐变成常见的手段,当前&a…...
单目相机实战:用OpenCV的solvePnP实现物体位姿估计(附Python代码)
单目相机实战:用OpenCV的solvePnP实现物体位姿估计(附Python代码) 在机器人导航、增强现实和工业检测等领域,精确获取物体相对于相机的位置和姿态是关键挑战。单目相机因其成本优势和轻量化特点,成为许多视觉系统的首选…...
Vue Flow实战:如何为你的AI应用设计一个可嵌套循环的工作流节点?
Vue Flow高级实战:构建支持嵌套循环的AI工作流编辑器 在AI应用开发中,复杂业务流程往往需要可视化编排能力。想象一个场景:当用户输入触发多个条件判断时,系统需要循环执行某些操作直到满足特定条件,同时允许在循环内部…...
ai赋能开发:让快马平台智能推荐最优的openclaw启动命令方案
在开发过程中,我们经常会遇到需要快速生成或优化命令行工具启动参数的情况。以openclaw为例,作为一个功能强大的监控和调试工具,它的启动命令往往包含大量参数选项,不同场景下需要不同的配置组合。传统方式下,开发者要…...
新手福音:在快马平台跟随交互式教程轻松搞定openclaw安装
最近在学习openclaw这个工具时,发现很多教程要么太简略,要么步骤不完整,对新手特别不友好。后来在InsCode(快马)平台上发现可以创建交互式教程项目,就尝试做了一个完整的openclaw安装指南。整个过程比我预想的顺利很多,…...
Docker下XTDrone仿真平台搭建全攻略(ROS-Noetic版,含常见错误解决方案)
Docker下XTDrone仿真平台搭建全攻略(ROS-Noetic版) 在无人机开发领域,仿真测试是验证算法、降低硬件损耗的关键环节。XTDrone作为国内开发者广泛使用的开源仿真平台,结合ROS和Gazebo提供了完整的无人机仿真解决方案。本文将带你从…...
最新版|2026年OpenClaw4月云端安装、配置大模型APIkey、接入skill指南,零门槛5分钟
最新版|2026年OpenClaw4月云端安装、配置大模型APIkey、接入skill指南,零门槛5分钟。OpenClaw作为2026年主流的AI自动化助理平台,可通过阿里云轻量服务器实现724小时稳定运行,并快速接入钉钉,让AI在企业群聊、个人工作…...
重构手游操控体验:Escrcpy如何颠覆手机游戏交互范式
重构手游操控体验:Escrcpy如何颠覆手机游戏交互范式 【免费下载链接】escrcpy 📱 Display and control your Android device graphically with scrcpy. 项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy 在移动游戏日益复杂的今天&…...
