利用Qwen大模型进行c++11并发库的学习,与时俱进!!!!

文章目录

  • 1、学习新的东西可以借助ai和官方文档
    • 1.1 会问问题
  • 异步编程教程
    • 1. std::future
    • 2. std::shared_future
    • 3、std::promise
    • 4、4. std::packaged_task
    • 5. std::async
    • 6. std::future_status 和等待函数
  • 综合代码
  • 总结

1、学习新的东西可以借助ai和官方文档

因为别人写的有可能会写错或者水平不高

1.1 会问问题

eg:
在这里插入图片描述
这样写可能会讲的不清晰并且会少讲函数接口等
你可以这样问
在这里插入图片描述
这样就会清晰很多。
后续不懂最好是问ai,再参考官方文档。

异步编程教程

在这里插入图片描述

1. std::future

std::future 是一个模板类,用于访问异步操作的结果。它提供了一种机制来获取异步操作(可能在另一个线程中执行)的返回值。

常用接口
get(): 获取结果,如果结果未准备好则阻塞

valid(): 检查 future 是否拥有共享状态

wait(): 等待结果变为可用

wait_for(): 等待一段时间

wait_until(): 等待直到某个时间点

#include <iostream>
#include <future>
#include <thread>
#include <chrono>int calculate() {std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟耗时计算return 42;
}int main() {// 使用 async 启动异步任务,返回 futurestd::future<int> fut = std::async(std::launch::async, calculate);std::cout << "正在计算结果..." << std::endl;// get() 会阻塞直到结果可用int result = fut.get();std::cout << "结果是: " << result << std::endl;// 再次调用 get() 会导致异常,因为共享状态已被消费// int result2 = fut.get(); // 错误!return 0;
}

2. std::shared_future

在这里插入图片描述

std::shared_future 类似于 std::future,但可以被多次访问(允许多个线程等待同一个结果)。

常用接口
与 std::future 类似,但可以多次调用 get()

#include <iostream>
#include <future>
#include <thread>
#include <vector>void worker(std::shared_future<int> fut) {// 每个线程都可以安全地获取结果int result = fut.get();std::cout << "Worker got result: " << result << std::endl;
}int main() {// 创建一个 promise 对象std::promise<int> prom;// 从 promise 获取 futurestd::future<int> fut = prom.get_future();// 将 future 转换为 shared_futurestd::shared_future<int> shared_fut = fut.share();// 创建多个线程共享同一个结果std::vector<std::thread> threads;for (int i = 0; i < 3; ++i) {threads.emplace_back(worker, shared_fut);}// 设置 promise 的值prom.set_value(42);// 等待所有线程完成for (auto& t : threads) {t.join();}return 0;
}

3、std::promise

std::promise 是一个模板类,用于存储一个值或异常,稍后可以通过与之关联的 std::future 对象获取。

常用接口
get_future(): 获取与 promise 关联的 future

set_value(): 设置结果值

set_exception(): 设置异常

set_value_at_thread_exit(): 在线程退出时设置值

set_exception_at_thread_exit(): 在线程退出时设置异常
在这里插入图片描述
在这里插入图片描述

#include <iostream>
#include <future>
#include <thread>
#include <stdexcept>void calculate(std::promise<int> prom) {try {// 模拟计算std::this_thread::sleep_for(std::chrono::seconds(1));int result = 42;// 设置结果值prom.set_value(result);} catch (...) {// 捕获所有异常并存储在 promise 中prom.set_exception(std::current_exception(

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

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

相关文章

曲面/线 拟合gnuplot

1. 下载gnuplot windows 版&#xff0c;安装&#xff0c;&#xff08;别的绿色的可能下载即用&#xff0c;推荐下面链接这款&#xff09; gnuplot - Browse Files at SourceForge.net 2. 准备数据&#xff0c;存成data.dat或者其它文件名称&#xff0c;放桌面 数据内容如下…

CentOS Linux 7 (Core)上部署Oracle 11g、19C RAC详细图文教程

一、部署参考链接&#xff1a; 墨天轮数据库社区 - 乐知乐享&#xff0c;同心共济 实战篇&#xff1a;一步步教你 Linux 7 安装 Oracle 11GR2 RAC 实战篇&#xff1a;Linux7 安装 Oracle 19C RAC 详细图文教程 Linux7 安装 Oracle 19C RAC 详细图文教程

WebSocket DevTools 开发调试工具完全指南 – 实时监控、消息拦截、性能分析一站式解决方案

概述 WebSocket DevTools 是一款专为 WebSocket 连接调试而设计的浏览器开发者工具扩展。它提供了实时监控、消息拦截、连接管理等功能&#xff0c;帮助开发者快速定位和解决 WebSocket 相关问题。 主要特性 &#x1f50d; 实时监控&#xff1a;实时显示 WebSocket 连接状态…

常见的光源频闪控制方式

一、光源频闪的优势消除运动模糊&#xff0c;提升成像质量 光源以极短脉冲&#xff08;微秒级&#xff09;与相机曝光严格同步&#xff0c;实现“瞬时冻结”高速运动物体。增强特征对比度&#xff0c;提高缺陷检出率 频闪模式下&#xff0c;LED可短时超负荷工作&#xff0c;峰值…

读From GPT-2 to gpt-oss: Analyzing the Architectural Advances(续)

序 本篇由来&#xff0c;在COC上我当面感谢了组委会和姜宁老师&#xff0c;随即被姜宁老师催稿&#xff0c;本来当天晚上写了一个流水账&#xff0c;感觉甚为不妥。于是决定慢慢写&#xff0c;缓缓道来。要同时兼顾Show me the code&#xff0c;Show me the vide。希望能形成一…

6-7 TIM编码器接口 [江科协STM32]

一、引入&#xff08;1&#xff09;编码器接口的好处&#xff1a;节约软件资源&#xff1a;外部中断计次&#xff0c;程序频繁进入中断&#xff0c;则软件资源会被简单频繁的工作给占用&#xff0c;效率不高使用定时器的编码器接口&#xff0c;再配合编码器&#xff0c;就可以测…

01数据结构-交换排序

01数据结构-交换排序1.冒泡排序1.1基础冒泡排序1.1.1基础冒泡排序代码实现1.2冒泡排序的一次优化1.2.1冒泡排序的第一次优化代码实现1.3冒泡排序的二次优化1.3.1 冒泡排序的二次优化代码实现2.快速排序2.1双边循环法2.1.1双边循环法的代码实现2.2单边循环法2.2.1单边循环法代码…

MySQL架构和储存引擎

MySQL服务器整体架构如下&#xff1a;连接层&#xff1a;连接层的作用是处理客户端的连接&#xff0c;如何管理连接的。网络端口和连接管理线程&#xff1a;网络端口&#xff1a;一台服务器可以连接网络上多个端口的客户连接&#xff0c;只需要开放多个端口&#xff0c;只需要在…

详解flink java基础(一)

文章目录1.流式处理flink介绍2.Flink SQL介绍3. Flink Runtime4.使用flink集成kafka5.使用Flink SQL进行有状态流处理6.Event time & Watermarks7. flink Checkpoints & recovery1.流式处理flink介绍 实时服务依赖流式处理: flink优点: 高性能丰富的特性&#xff1a…

Day119 持续集成docker+jenkins

Day119 dockerjenkins 1.Dockerfile Dockerfile 可以用于项目部署。通过编写 Dockerfile&#xff0c;可以将整个项目及其所需的依赖项打包到一个 Docker 镜像中&#xff0c;然后在任何支持 Docker 的环境中部署和运行该镜像 Dockerfile 是用于构建 Docker 镜像的文本文件。它包…

Vue3+Vite MPA多页面应用开发完整指南 – 从零搭建到部署优化

什么是 MPA 多页面应用 MPA&#xff08;Multi-Page Application&#xff09;是由多个独立的 HTML 页面组成的应用&#xff0c;每个页面都有独立的入口文件。与 SPA 不同&#xff0c;MPA 的每个页面都是独立的&#xff0c;页面间通过链接跳转&#xff0c;适合大型项目或需要 SE…

【企业级架构】企业战略到技术落地的全流程【第一篇】

目录 一、人生蓝图与企业罗盘&#xff1a;战略视角下的成长架构 1. 大学毕业迷茫期 → 企业未制定战略前&#xff1a;无方向、无目标​ 2. 制定职业规划 → 企业战略制定&#xff1a;明确 “去哪” 和 “分几步走”​ 3. 盘点自身能力差距 → 业务架构梳理&#xff1a;搞清…

(二) Python + 地球信息科学与技术 = 经典案例分析

目录 四、农业精准施肥与产量预测&#xff08;植被指数 机器学习&#xff09; 五、公共场所踩踏事故预警系统&#xff08;时空大数据 Web 开发&#xff09; 六、森林火灾智能识别与救援路径规划&#xff08;遥感 路径优化&#xff09; 七、海岸线侵蚀动态监测与防护&…

从需求到部署全套方案:餐饮服务许可证数据可视化分析系统的大数据技术实战

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

Qt 关于QString和std::string数据截断的问题- 遇到\0或者0x00如何处理?

Qt 关于QString和std::string数据截断的问题- 遇到\0或者0x00如何处理&#xff1f;引言一、解决方案二、使用QByteArray注意事项引言 在Qt开发中&#xff0c;使用QString或std::string获取、发送字符串时&#xff0c;遇到\0(空字符)或者0x00(十六进制表示)可能导致数据截断&am…

Spring Cloud LoadBalancer 最佳实践

Ribbon 曾经是 Spring Cloud 家族默认的客户端负载均衡工具&#xff0c;而 Spring Cloud LoadBalancer (SCLB) 是官方替换 Ribbon 的新实现。表面上它们都解决 “服务调用时选哪个实例” 的问题&#xff0c;但在理念、架构和生态上差异不小。一、Ribbon vs SCLB1. 定位和生态…

【STM32】SPI 与 Flash 笔记

1️⃣ SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;英文解释&#xff1a; Serial&#xff1a;串行Peripheral&#xff1a;外设Interface&#xff1a;接口用途&#xff1a;MCU 与外部设备&#xff08;Flash、传感器等&#xff09;高速数据通…

抽象工厂设计模式 Abstract Factory

抽象工厂抽象工厂设计模式是一种创建模式&#xff0c;它提供了一个用于创建相关或从属对象族的接口&#xff0c;而无需指定其具体类。 它在以下情况下特别有用&#xff1a; 您需要创建必须一起使用并且是一致系列的一部分的对象&#xff08;例如&#xff0c;按钮、复选框和菜单…

WSL 下的虚拟网卡配置

第一部分&#xff1a;Windows 虚拟网卡创建指南 1. 原理 在 Windows 里&#xff0c;“虚拟网卡”本质是由网络驱动在系统网络栈中创建的一个 软件网卡接口。它的作用和物理网卡类似&#xff0c;只不过不直接连接到物理硬件&#xff0c;而是通过内核网络驱动与宿主机网络进行交换…

Dify web前端源码本地部署详细教程

目录 1. 先启动API 2. 启动worker服务 3. 启动web 4. 访问登陆地址 在前面的文章中&#xff0c;Dify源码部署&#xff0c;搭建二次开发环境&#xff08;一&#xff09; 已经记录了如何在本地启动API、work、中间件。在本篇文章中&#xff0c;将概述如何启动dify web源码项…