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

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.lryc.cn/news/347006.html

相关文章:

  • C++ list介绍(迭代器失效)
  • codeforces 1809C
  • Nginx part3 创建一个https的网站
  • 事件高级。
  • Vue从入门到实战Day04
  • Linux学习笔记:信号
  • C#中的隐式类型转换和显式类型转换
  • linux上如何排查JVM内存过高?
  • 第四届上海理工大学程序设计全国挑战赛 J.上学 题解 DFS 容斥
  • word-排版文本基本格式
  • 目标检测YOLO实战应用案例100讲-无监督领域自适应目标检测方法研究与应用(五)
  • 通过python实现Google的精准搜索
  • Nios-II编程入门实验
  • 从0开始学python(七)
  • 【二叉树算法题记录】404. 左叶子之和
  • 面试集中营—Spring篇
  • Lia 原理
  • 文本批量操作技巧:内容查找不再繁琐,自动化批量移动至指定文件夹
  • [数据结构]动画详解单链表
  • 图片批量管理迈入智能新时代:一键输入关键词,自动生成并保存惊艳图片,轻松开启创意之旅!
  • 【硬件模块】ESP-01SWiFi模块基于AT指令详解(WiFi,TCP/IP,MQTT)
  • 数据结构之单单单——链表
  • 【Linux笔记】 基础指令(二)
  • 软件全套资料梳理(需求、开发、实施、运维、安全、测试、交付、认证、评审、投标等)
  • javacv实时解析pcm音频流
  • Matlab|考虑极端天气线路脆弱性的配电网分布式电源和储能优化配置模型
  • 【Python基础】装饰器(3848字)
  • 十、Redis内存回收策略和机制
  • Ansible --- playbook 脚本+inventory 主机清单
  • 【hive】transform脚本