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

C++元编程——模拟javascript异步执行

javascript有一个期约调用,就是利用内部的一种协程机制实现的类似并行的操作。以下是用ChatGPT搞出来的一块演示代码:

// 异步任务
function asyncTask() {return new Promise((resolve, reject) => {setTimeout(() => {const randomNumber = Math.floor(Math.random() * 10);if (randomNumber < 5) {resolve(randomNumber);} else {reject("Error: Random number is greater than or equal to 5");}}, 1000);});
}
// 调用异步任务
asyncTask().then((result) => {console.log("Resolved:", result);}).catch((error) => {console.error("Rejected:", error);});

可以看到,这个里面用了asyncTask创建了一个期约,然后调用期约执行程序。在期约执行的期间主线程会继续执行。

下面有C++11搞了个类似的通过then串联逻辑链的:

template<typename f_t, typename...fs_t>
class chain
{
private:f_t cur_f;chain<fs_t...> next;
public:chain(f_t f, fs_t...fs) :cur_f(f), next(fs...){}chain(f_t f, chain<fs_t...> pre):cur_f(f), next(pre){}template<typename next_f_t>auto then(next_f_t next_f){return chain<next_f_t, f_t, fs_t...>(next_f, *this);}template<typename...args_t>auto run(args_t...args){return cur_f(next.run(args...));}template<typename...args_t>void start(args_t...args){std::thread([&]() {run(args...); }).detach();		// 使用一种并行机制运行}
};template<typename f_t>
class chain<f_t>
{
private:f_t cur_f;
public:chain(f_t f):cur_f(f){}template<typename next_f_t>auto then(next_f_t next_f){return chain<next_f_t, f_t>(next_f, cur_f);}template<typename...args_t>auto run(args_t...args){return cur_f(args...);}template<typename...args_t>void start(args_t...args){std::thread([&]() {run(args...); }).detach();		// 使用一种并行机制运行}
};template<typename f_t>
chain<f_t> chain_call(f_t f)
{return chain<f_t>(f);
}#include <iostream>
#include <future>
#include <chrono>int main(int argc, char** argv)
{chain_call([](int i) {return i + 1; }).then([](int i) { return i * i; })	.then([](int i) {return i * (i + 1); })	.then([](int i) {std::cout << i << std::endl; }).start(1);std::this_thread::sleep_for(std::chrono::seconds(3));std::cout << "main out" << std::endl;return 0;
}

当然,我觉得这个就是有点脱裤子放屁,直接创建一个线程,然后依次调用这些then函数就可以了。此处仅仅用于娱乐。

相关文章:

C++元编程——模拟javascript异步执行

javascript有一个期约调用&#xff0c;就是利用内部的一种协程机制实现的类似并行的操作。以下是用ChatGPT搞出来的一块演示代码&#xff1a; // 异步任务 function asyncTask() {return new Promise((resolve, reject) > {setTimeout(() > {const randomNumber Math.f…...

【JavaEE】懒人的福音-MyBatis框架—复杂的操作-动态SQL

【JavaEE】MyBatis框架要点总结&#xff08;3&#xff09; 文章目录 【JavaEE】MyBatis框架要点总结&#xff08;3&#xff09;1. 多表查询1.1 映射表resultMap1.2 只有部分属性跨表查询1.2.1 依照常规去写代码1.2.2 用标签去实现接口 1.3 分多步的解决方案1.4 与多线程的结合 …...

Springboot 默认路径说明

Spring Boot基本上是Spring框架的扩展&#xff0c;它消除了设置Spring应用程序所需的样板配置&#xff0c;极大的方便了开发者&#xff0c;其默认识别路径如下&#xff1a; Spring Boot 作为Spring默认将 /** 所有访问映射到以下目录&#xff1a; 1、classpath:/static 用于加…...

springboot注册拦截器与返回统一标准响应格式

响应对象ResultVO package com.example.poi.utils;import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;/*** A…...

卷王特斯拉又全网降价了,卷死车企们

哈喽,大家好,今天媒介盒子小编又来跟大家分享软文推广的干货知识了,本篇分享的主要内容是&#xff1a;特斯无孔不入的营销手段。 1、特斯拉Model Y降价 车企要打架 自2023 年 8 月 14 日起&#xff0c;Model Y 长续航版起售价从 31.39 万元调整为 29.99 万元&#xff0c;Mode…...

wiley:revision 流程

1 上传修改后的word文件 注意&#xff1a;包括没标注修改位置的word文件和标注了修改位置的word文件 2 上传response回复文件 Your Author Response should include relevant comments that you have copied from the decision letter, along with your comments detailing …...

【论文阅读】基于深度学习的时序预测——Pyraformer

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长时序数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 论文三&#xff1a;2022 FEDformer&#xff1a;长序列数据预测 论文四&#xff1a;2022 Non-Stationary Transformers&#xff1a;非平…...

玩转IndexedDB,比localStorage、cookie还要强大的网页端本地缓存

随着浏览器的功能不断增强&#xff0c;越来越多的网站开始考虑&#xff0c;将大量数据储存在客户端&#xff0c;这样可以减少从服务器获取数据&#xff0c;直接从本地获取数据。 现有的浏览器数据储存方案&#xff0c;都不适合储存大量数据&#xff1a;Cookie 的大小不超过 4K…...

RedisDesktopManager连不上redis问题解决(小白版)

常见问题就是 redis.conf配置文件 a.将port 127.0.0.1这一行注释掉 b.protected-mode保护模式改为no 这个可以看到很多博主都说了&#xff0c;相信都搜到这里来了你们都弄了&#xff0c;我就不详细说了 防火墙开放端口 我说明我自己的问题以及解决方法 1、执行telnet 虚拟…...

蓝帽杯 取证2022

网站取证 网站取证_1 下载附件 并解压 得到了一个文件以及一个压缩包 解压压缩包 用火绒查病毒 发现后门 打开文件路径之后 发现了一句话木马 解出flag 网站取证_2 让找数据库链接的明文密码 打开www文件找找 查看数据库配置文件/application/database.php&#xff08;CodeI…...

MyBatis and or使用列表控制or条件

背景&#xff1a;最近项目需要&#xff0c;师傅可以查找订单&#xff0c;而师傅是指定可以服务2到3个区域&#xff0c;故需要使用到and, or条件的组合&#xff0c;以下记一下代码。 最重要的代码是&#xff1a; 1、构建List<Consumer<LambdaQueryWrapper<T>>&g…...

C语言刷题训练【第11天】

大家好&#xff0c;我是纪宁。 今天是C语言笔试刷题训练的第11天&#xff0c;加油&#xff01; 文章目录 1、声明以下变量&#xff0c;则表达式: ch/i (f*d – i) 的结果类型为&#xff08; &#xff09;2、关于代码的说法正确的是&#xff08; &#xff09;3、已知有如下各变…...

正则表达式的使用

1、正则表达式-教程 正则表达式&#xff1a;文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a到z之间的字母&#xff09;和特殊字符&#xff08;称为元字符&#xff09;。 正则表达式使用单个字符串来描述&#xff0c;匹配一系列匹配某个句法规则的字符串。 2、…...

PHP 求解两字符串所有公共子序列及最长公共子序列 支持多字节字符串

/*** 获取两字符串所有公共子序列【不连续的】 例&#xff1a;abc ac > ac** param string $str1 字符串1* param string $str2 字符串2** return array*/ function public_sequence(string $str1, string $str2): array {$data [[-1, -1, , 0, ]]; // 子序列容器【横坐标 …...

linux内核bitmap之setbit汇编实现

内核版本&#xff1a;kernel 0.12 首先看一段代码&#xff0c;下面这段代码来自内核版本0.12的mm/swap.c中&#xff1a; // mm/swap.c #define bitop(name,op) \static inline int name(char * addr,unsigned int nr) \ { \int __res; \__asm__ __volatile__("bt" …...

Golang设计模式

Golang设计模式 Golang设计模式简介Golang工厂设计模式Golang单例设计模式Golang抽象工厂设计模式Golang建造者模式 (Builder Pattern)Golang 原型模式(Prototype Pattern)Golang适配器模式Golang 桥接模式&#xff08;Bridge Pattern&#xff09;Golang装饰器模式(Decorator …...

leetcode151. 反转字符串中的单词

题目&#xff1a;leetcode151. 反转字符串中的单词 描述&#xff1a; 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结…...

【BASH】回顾与知识点梳理(十七)

【BASH】回顾与知识点梳理 十七 十七. 什么是 Shell scripts17.1 干嘛学习 shell scripts自动化管理的重要依据追踪与管理系统的重要工作简单入侵检测功能连续指令单一化简易的数据处理跨平台支持与学习历程较短 17.2 第一支 script 的撰写与执行撰写第一支 script 17.3 撰写 s…...

时序预测-Informer简介

文章目录 Informer介绍1. Transformer存在的问题2. Informer研究背景3. Informer 整体架构3.1 ProbSparse Self-attention3.2 Self-attention Distilling3.3 Generative Style Decoder 4. Informer的实验性能5. 相关资料 Informer介绍 1. Transformer存在的问题 Informer实质…...

2023牛客第七场补题报告C F L M

2023牛客第七场补题报告C F L M C-Beautiful Sequence_2023牛客暑期多校训练营7 (nowcoder.com) 思路 观察到数组一定是递增的&#xff0c;所以从最高位往下考虑每位的1最多只有一个&#xff0c;然后按位枚举贪心即可。 代码 #include <bits/stdc.h> using namespac…...

易语言开发雷电模拟器中控系统源码包|完整框架+核心模块源代码

温馨提示&#xff1a;文末有联系方式易语言雷电模拟器中控系统源码发布 本套为基于易语言开发的雷电模拟器中控框架完整源码包&#xff0c;涵盖主控逻辑、设备通信、指令调度等核心模块&#xff0c;采用模块化设计&#xff0c;便于二次开发与功能扩展。框架完整性说明 当前版本…...

LeetCode 删除无效的括号:python 题解瘸

这个代码的核心功能是&#xff1a;基于输入词的长度动态选择反义词示例&#xff0c;并调用大模型生成反义词&#xff0c;体现了 “动态少样本提示&#xff08;Dynamic Few-Shot Prompting&#xff09;” 与 “上下文长度感知的示例选择” 的能力。 from langchain.prompts imp…...

深入解析.ko驱动模块加载报错:unknown symbol问题排查与依赖管理

1. 遇到unknown symbol报错时的心态调整 第一次看到"unknown symbol in module"这个报错时&#xff0c;我正熬夜调试一个摄像头驱动。当时整个人都是懵的——明明编译通过了&#xff0c;为什么加载时会说找不到符号&#xff1f;后来才发现&#xff0c;这是Linux内核驱…...

Binder使用方式及常见组成及案例分析

Binder 是 Android 核心的跨进程通信&#xff08;IPC&#xff09; 机制&#xff0c;以一次内存拷贝、内置安全校验、面向对象接口为核心优势&#xff0c;是系统服务与应用通信的基石。下面从核心组成、使用方式、实战案例、原理与常见问题四方面完整解析。一、Binder 核心组成&…...

数据开发者的AI转型:大模型应用实录

1️⃣需求解析&辅助研发 这个功能其实很有意思&#xff0c;我们迭代了两期。 第一期&#xff0c;其实这个功能一开始设计的比较天马行空&#xff0c;就是直接给一个需求进来&#xff0c;然后直接给你开发好。但是研发了半个月叫停了&#xff0c;发现模型根本理解不了整个需…...

从零搭建一个RAG应用:我为什么最终放弃了ChromaDB而选择了Milvus?

从零搭建一个RAG应用&#xff1a;我为什么最终放弃了ChromaDB而选择了Milvus&#xff1f; 去年夏天&#xff0c;当我接到为企业内部构建文档知识库系统的任务时&#xff0c;本以为选择向量数据库会是整个项目中最简单的决策。毕竟ChromaDB在开发者社区的口碑极佳&#xff0c;文…...

哪款头戴式蓝牙耳机性价比高?十大热门平价头戴式耳机品牌推荐!

2026年头戴耳机市场新老品牌争奇斗艳&#xff0c;从入门到高端让人目不暇接。作为一名经历过选择困难的音频爱好者&#xff0c;我完全理解这种幸福的烦恼&#xff1a;参数术语堆砌、营销话术包装&#xff0c;让人难辨虚实。在实测过多款产品后&#xff0c;我发现关键要避开这些…...

自然堂冲刺港股:年营收53亿 利润3.5亿 估值71亿

雷递网 雷建平 4月7日演员虞书欣代言的自然堂全球控股有限公司&#xff08;简称&#xff1a;“自然堂”&#xff09;日前更新招股书&#xff0c;准备在港交所上市。2025年&#xff0c;自然堂引入一轮融资&#xff0c;总金额达7.42亿元。美町与自然堂于2024年10月23日订立股份认…...

从零实现高性能日志系统(二):日志落地与文件轮询机制

在上一篇&#xff08;Ubuntu虚拟机下基于C实现带时间戳的日志系统&#xff08;CMake构建完整版&#xff09;&#xff09;文章中&#xff0c;我们完成了日志系统的基础架构搭建&#xff0c;实现了日志级别控制、日志格式化输出等核心能力&#xff0c;但此时日志还仅停留在内存层…...

Facenet-Pytorch人脸识别实战指南:5步快速构建精准人脸识别系统

Facenet-Pytorch人脸识别实战指南&#xff1a;5步快速构建精准人脸识别系统 【免费下载链接】facenet-pytorch Pretrained Pytorch face detection (MTCNN) and facial recognition (InceptionResnet) models 项目地址: https://gitcode.com/gh_mirrors/fa/facenet-pytorch …...