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

学习Linux进程冻结技术

原文:蜗窝科技Linux进程冻结技术

功耗中经常需要用到,但是linux这块了解甚少,看到这个文章还蛮适合我阅读的

1 什么是进程冻结

进程冻结技术(freezing of tasks)是指在系统hibernate或者suspend的时候,将用户进程和部分内核线程置于“可控”的暂停状态。

2 为什么需要冻结技术

假设没有冻结技术,进程可以在任意可调度的点暂停,而且直到cpu_down才会暂停并迁移。这会给系统带来很多问题:

(1)有可能破坏文件系统。在系统创建hibernate image到cpu down之间,如果有进程还在修改文件系统的内容,这将会导致系统恢复之后无法完全恢复文件系统;

(2)有可能导致创建hibernation image失败。创建hibernation image需要足够的内存空间,但是在这期间如果还有进程在申请内存,就可能导致创建失败;

(3)有可能干扰设备的suspend和resume。在cpu down之前,device suspend期间,如果进程还在访问设备,尤其是访问竞争资源,就有可能引起设备suspend异常;

(4)有可能导致进程感知系统休眠。系统休眠的理想状态是所有任务对休眠过程无感知,睡醒之后全部自动恢复工作,但是有些进程,比如某个进程需要所有cpu online才能正常工作,如果进程不冻结,那么在休眠过程中将会工作异常。

3 代码实现框架

冻结的对象是内核中可以被调度执行的实体,包括用户进程、内核线程和work_queue。用户进程默认是可以被冻结的,借用信号处理机制实现;内核线程和work_queue默认是不能被冻结的,少数内核线程和work_queue在创建时指定了freezable标志,这些任务需要对freeze状态进行判断,当系统进入freezing时,主动暂停运行。

0

标记系统freeze状态的有三个重要的全局变量:pm_freezing、system_freezing_cnt和pm_nosig_freezing,如果全为0,表示系统未进入冻结;system_freezing_cnt>0表示系统进入冻结,pm_freezing=true表示冻结用户进程,pm_nosig_freezing=true表示冻结内核线程和workqueue。它们会在freeze_processes和freeze_kernel_threads中置位,在thaw_processes和thaw_kernel_threads中清零。

fake_signal_wake_up函数巧妙的利用了信号处理机制,只设置任务的TIF_SIGPENDING位,但不传递任何信号,然后唤醒任务;这样任务在返回用户态时会进入信号处理流程,检查系统的freeze状态,并做相应处理。

任务主动调用try_to_freeze的代码如下:

/** * @brief 尝试将当前任务(进程)主动置入冻结状态(非安全上下文) * @return bool - true: 冻结成功;false: 未触发冻结条件 * @note 此函数通常在原子上下文或中断禁用场景调用,需确保无锁竞争风险 */static inline bool try_to_freeze_unsafe(void){    // 检查当前进程是否满足冻结条件(通过freezing(current)快速判断)    if (likely(!freezing(current)))         return false; // 系统未启用冻结或当前进程无需冻结    // 调用核心冻结逻辑,参数false表示非强制冻结(允许进程自行处理信号等)    return __refrigerator(false); }/** * @brief 快速检查系统全局冻结状态及当前进程的冻结条件 * @param p - 待检查的进程描述符(struct task_struct指针) * @return bool - true: 需要冻结;false: 无需冻结 * @note 通过原子变量system_freezing_cnt优化高频调用的性能 */static inline bool freezing(struct task_struct *p){    // 原子读取系统全局冻结计数器,若为0则快速返回(likely优化分支预测)    if (likely(!atomic_read(&system_freezing_cnt)))        return false; // 系统未启用冻结功能    // 进入慢速路径,进一步检查进程特定的冻结条件    return freezing_slow_path(p);}/** * @brief 慢速路径检查进程的详细冻结条件 * @param p - 待检查的进程描述符 * @return bool - true: 需冻结;false: 豁免冻结 * @note 此函数处理以下冻结策略: *       1. PF_NOFREEZE标记的进程(如内核关键线程)始终豁免 *       2. 系统级冻结(pm_nosig_freezing)或cgroup冻结策略 *       3. 用户进程冻结(pm_freezing)且非内核线程 */bool freezing_slow_path(struct task_struct *p){    // 检查进程是否标记为禁止冻结(如某些关键内核线程)    if (p->flags & PF_NOFREEZE)          return false; // 明确豁免冻结    // 检查系统是否处于"无信号"冻结模式(如休眠时冻结内核线程)    // 或进程属于需冻结的cgroup    if (pm_nosig_freezing || cgroup_freezing(p))          return true; // 强制冻结    // 检查系统是否在冻结用户进程,且当前进程为用户进程(非内核线程)    if (pm_freezing && !(p->flags & PF_KTHREAD))         return true; // 冻结用户空间进程    return false; // 默认不冻结}

进入冻结状态直到恢复的主要函数:

bool __refrigerator(bool check_kthr_stop)​​​​​​​

for (;;) {  // 无限循环,直到满足解冻条件    /* 1. 设置进程为不可中断睡眠状态(D状态)     * - TASK_UNINTERRUPTIBLE 确保进程不会被信号唤醒,仅能通过内核主动唤醒     * - 这种状态是冻结进程的核心,避免进程在冻结期间被调度执行 */    set_current_state(TASK_UNINTERRUPTIBLE);    /* 2. 获取 freezer_lock 自旋锁并禁用中断(spin_lock_irq)     * - 保护对 current->flags 的原子修改,防止竞态条件     * - 禁用中断避免中断处理程序并发访问冻结状态 */    spin_lock_irq(&freezer_lock);    /* 3. 标记当前进程为已冻结(PF_FROZEN)     * - PF_FROZEN 是冻结完成的标志,被 thaw_processes() 等解冻函数检测     * - 此处仅设置标志,实际冻结通过后续 schedule() 放弃CPU实现 */    current->flags |= PF_FROZEN;    /* 4. 检查是否需要解除冻结:     * - freezing(current): 系统是否仍要求冻结(如休眠未完成)     * - kthread_should_stop(): 内核线程是否收到停止信号(如模块卸载)     * 若任一条件为真,则清除 PF_FROZEN 标志,准备退出循环 */    if (!freezing(current) || (check_kthr_stop && kthread_should_stop()))        current->flags &= ~PF_FROZEN;  // 清除冻结标志    spin_unlock_irq(&freezer_lock);  // 释放锁并恢复中断    /* 5. 检查是否已解除冻结:     * - 若 PF_FROZEN 被清除,则跳出循环,恢复执行     * - 否则继续进入调度等待 */    if (!(current->flags & PF_FROZEN))        break;    /* 6. 记录冻结状态并主动放弃CPU     * - was_frozen 用于返回是否曾被冻结(用于统计或调试)     * - schedule() 触发进程切换,当前进程进入睡眠队列,直到被解冻唤醒 */    was_frozen = true;    schedule();  // 调用调度器,进程进入睡眠状态}

4 参考文献

(1)http://www.wowotech.net/linux_kenrel/suspend_and_resume.html

(2) http://www.wowotech.net/linux_kenrel/std_str_func.html

(3) kenrel document: freezing-of-tasks.txt

相关文章:

学习Linux进程冻结技术

原文:蜗窝科技Linux进程冻结技术 功耗中经常需要用到,但是linux这块了解甚少,看到这个文章还蛮适合我阅读的 1 什么是进程冻结 进程冻结技术(freezing of tasks)是指在系统hibernate或者suspend的时候,将…...

Docker基本概念——AI教你学Docker

1.1 Docker 概念详解 1. Docker 是什么? Docker 是一个开源的应用容器引擎,它让开发者可以将应用及其依赖打包到一个可移植的容器(Container)中,并在任何支持 Docker 的 Linux、Windows 或 macOS 系统上运行。这样做…...

第十六届蓝桥杯C/C++程序设计研究生组国赛 国二

应该是最后一次参加蓝桥杯比赛了,很遗憾,还是没有拿到国一。 大二第一次参加蓝桥杯,印象最深刻的是居然不知道1s是1000ms,花了很多时间在这题,后面节奏都乱了,抗压能力也不行,身体也不适。最后…...

Python 数据分析与可视化 Day 5 - 数据可视化入门(Matplotlib Seaborn)

🎯 今日目标 掌握 Matplotlib 的基本绘图方法(折线图、柱状图、饼图)掌握 Seaborn 的高级绘图方法(分类图、分布图、箱线图)熟悉图像美化(标题、标签、颜色、风格)完成一组学生成绩数据的可视化…...

WebRTC(八):SDP

SDP 概念 SDP 是一种描述多媒体通信会话的文本格式(基于 MIME,RFC 4566)。本身 不传输数据,仅用于在会话建立阶段传递信息。常与 SIP(VoIP)、RTSP、WebRTC 等协议配合使用。 用途 描述媒体类型&#xf…...

《哈希表》K倍区间(解题报告)

文章目录 零、题目描述一、算法概述二、算法思路三、代码实现四、算法解释五、复杂度分析 零、题目描述 题目链接:K倍区间 一、算法概述 计算子数组和能被k整除的子数组数量的算法。通过前缀和与哈希表的结合,高效地统计满足条件的子数组。  需要注…...

牛津大学开源视频中的开放世界目标计数!

视频中的开放世界目标计数 GitHub PaPer Niki Amini-Naieni nikianrobots.ox.ac.uk Andrew Zisserman azrobots.ox.ac.uk 视觉几何组(VGG),牛津大学,英国 ​ 图 1:视频中的目标计数:给定顶行的视频&#…...

1.2、CAN总线帧格式

1、帧类型 2、帧类型介绍 (1)数据帧 扩展格式是为了扩展ID,ID号每4位一个字节(11位最大ID号为0x7FF) (2)遥控帧 遥控帧由于没有Data,所以DLC可能没有意义,可给任意值&am…...

DeepSeek今天喝什么随机奶茶推荐器

用DeepSeek生成了一个随机奶茶推荐器-今天喝什么,效果非常棒!UI界面美观。 提示词prompt如下 用html5帮我生成一个今天喝什么的网页 点击按钮随机生成奶茶品牌等,要包括中国常见的知名的奶茶品牌 如果不满意还可以随机再次生成 ui界面要好看 …...

词编码模型怎么进行训练的,输出输入是什么,标签是什么

词编码模型怎么进行训练的,输出输入是什么,标签是什么 词编码模型的训练本质是通过数据驱动的方式,将离散的文本符号映射为连续的语义向量。 一、训练机制:从符号到向量的映射逻辑 1. 核心目标 将单词/子词(Token)映射为低维向量,使语义相关的词在向量空间中距离更近…...

LSTM、GRU 与 Transformer网络模型参数计算

参数计算公式对比 模型类型参数计算公式关键组成部分LSTM4 (embed_dim hidden_size hidden_size hidden_size)4个门控结构GRU3 (embed_dim hidden_size hidden_size hidden_size)3个门控结构Transformer (Encoder)12 embed_dim 9 embed_dim ff_dim 14 embed_dim…...

nnv开源神经网络验证软件工具

一、软件介绍 文末提供程序和源码下载 用于神经网络验证的 Matlab 工具箱,该工具箱实现了可访问性方法,用于分析自主信息物理系统 (CPS) 领域中带有神经网络控制器的神经网络和控制系统。 二、相关工具和软件 该工具箱利用神经…...

SQLite3 在嵌入式系统中的应用指南

SQLite3 在嵌入式系统中的应用指南 一、嵌入式系统中 SQLite3 的优势 SQLite3 是嵌入式系统的理想数据库解决方案,具有以下核心优势: 特性嵌入式系统价值典型指标轻量级适合资源受限环境库大小:500-700KB零配置无需数据库管理员开箱即用无…...

原生微信小程序网络请求与上传接口封装实战指南

本文基于微信小程序原生 API,封装 request 和 uploadFile 接口,最终实现统一请求管理、请求拦截、错误处理等能力。 📦 一、为什么要封装网络请求? 微信小程序提供了 wx.request 和 wx.uploadFile 原生 API,但直接使用…...

电路图识图基础知识-塔式起重机控制电路识图与操作要点(三十五)

引言: 塔式起重机作为建筑施工中不可或缺的大型起重运输机械设备,其控制电路的识图与操作对于确保施工安全和效率至关重要。本文将详细介绍塔式起重机的控制电路识图,帮助操作人员更好地理解和掌握其工作原理。 一、塔式起重机概述 塔式起重…...

基于SpringBoot + Vue 的网上拍卖系统

基于springbootvue的在线拍卖系统| Java | vue | 配万字文档 | springboot001 〔运行环境〕 Java版本:jdk1.8 node版本:13.x python版本:2.7 IDE类型:idea或exlipse 数据库:MySQL(5.x或8.x版本都…...

用 EXCEL/WPS 实现聚类分析:赋能智能客服场景的最佳实践

聚类分析作为无监督学习的核心技术,能在客服数据中发现隐藏的用户群体或问题模式。尽管 Excel/WPS 并非专业统计软件,但巧妙利用其内置功能,也能实现基础的聚类分析,为中小型客服团队提供快速洞察。以下介绍具体方法及智能客服场景…...

利用mold加快rust程序构建

我用rust的cargo build命令编译polars-cli时,用时达到14分钟,如下所示。 Finished dev profile [unoptimized debuginfo] target(s) in 14m 19s,通过核对时间戳,发觉其中最后一步生成可执行文件花了6分钟。 于是向DeepSeek请教&a…...

leetcode543-二叉树的直径

leetcode 543 思路 路径长度计算:任意两个节点之间的路径长度,等于它们的最低公共祖先到它们各自的深度之和递归遍历:通过后序遍历(左右根)计算每个节点的左右子树深度,并更新全局最大直径深度与直径的关…...

(三)yolov5——模型训练

一、准备数据 先准备一个MP4的视频 1.测试一帧 使用opencv来提取每一个视频的帧 先使用以下代码查看一帧的内容,是否符合预期 import cv2 import matplotlib.pyplot as plt# 打开视频文件 video cv2.VideoCapture("111.mp4") # 读取一帧 ret, frame…...

STM32对接霍尔传感器

STM32对接霍尔传感器的技术解析与应用实现,结合测速原理、硬件设计、代码实现及进阶应用,涵盖从基础到实战的全流程指南,可以应用到金属检测等功能。 ⚙️ 一、霍尔传感器基础 工作原理 霍尔传感器基于霍尔效应,当磁铁靠近时输出电平变化(常开型无磁铁时输出高电平,靠近时…...

SpringCloud系列(32)--使用Hystrix进行全局服务降级

前言:在上一节中我们使用Hystrix进行了服务降级,但是要在每个方法上面配置HystrixCommand才能实现服务降级,如果需要进行服务降级的方法多了,HystrixCommand也就得配置很多遍,所以本节内容则是使用Hystrix进行了全局服…...

Origin绘制三Y轴柱状图、点线图、柱状点线图

三Y轴柱状图是一种高级数据可视化形式,它通过三个独立的纵轴在同一个图表中展示不同量纲或量级的数据系列。其主要用于揭示不同量级指标间的关联性(例如高销售额是否伴随高利润率)。 当数据满足以下条件时,即可绘制三Y轴图&#x…...

通信网络编程3.0——JAVA

主要添加了私聊功能 1服务器类定义与成员变量 public class ChatServer {int port 6666;// 定义服务器端口号为 6666ServerSocket ss;// 定义一个 ServerSocket 对象用于监听客户端连接//List<Socket> clientSockets new ArrayList<>();// 定义一个列表用于存储…...

4-深度学习网络层

深度学习模型 Embedding层 Embedding矩阵是可训练的参数&#xff0c;一般会在模型构建时随机初始化 也可以使用预训练的词向量来做初始化&#xff0c;此时也可以选择不训练Embedding层中的参数 输入的整数序列可以有重复&#xff0c;但取值不能超过Embedding矩阵的列数 核心…...

【LeetCode】用双指针解决移除元素问题、合并两个有序数组求解

&#x1f525;个人主页&#xff1a;艾莉丝努力练剑 ❄专栏传送门&#xff1a;《C语言》、《数据结构与算法》、C语言刷题12天IO强训 &#x1f349;学习方向&#xff1a;C/C方向 ⭐️人生格言&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;…...

车载诊断架构协议篇 --- OBDonUDS和ZEVonUDS

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 做到欲望极简&#xff0c;了解自己的真实欲望&#xff0c;不受外在潮流的影响&#xff0c;不盲从&#x…...

医学 Agent:自带医学深度调研 deep research,优化治疗策略+药物参考

医学 Agent&#xff1a;自带医学深度调研deep research&#xff0c;优化治疗策略药物参考 第一版代码输出结果&#xff0c;居然连不上网运行结果梳理 第二版结果测试 第一版代码 医疗顾问AI系统 - 基于Qwen API 的智能医疗助手 最终目标&#xff1a;构建一个能够查询疾病治疗方…...

硬件工程师笔试面试高频考点汇总——(2025版)

目录 1 电子器件部分 1.1 电阻 1.1.1 电阻选型时一般从哪几个方面进行考虑? 1.1.2 上拉下拉电阻的作用 1.1.3 PTC热敏电阻作为电源电路保险丝的工作原理 1.1.4 如果阻抗不匹配&#xff0c;有哪些后果 1.1.5 电阻、电容和电感0402、0603和0805封装的含义 1.1.6 电阻、电…...

春秋云镜【CVE-2017-18349】fastjson wp

知识点 fastjson反序列化 将json转为java对象的过程 漏洞存在版本 Fastjson<1.2.24 漏洞原理 fastjson引入的autotype功能&#xff0c;本来是为了区分同名同元素但是不同类型的对象序列化后内容一致无法还原的问题&#xff0c;但是这一操作允许了json数据中通过type来指定对…...

网络编程:八股文

一.Reactor网络模型 ------------------- | 应用主线程 | -------------------|v ------------------- | Reactor | | (事件分发器) | -------------------|v ------------------- | 事件多路分发器 | <--- epoll/poll/select -----------------…...

设计模式精讲 Day 11:享元模式(Flyweight Pattern)

【设计模式精讲 Day 11】享元模式&#xff08;Flyweight Pattern&#xff09; 文章内容 在软件开发过程中&#xff0c;我们常常需要处理大量相似对象的创建和管理问题。如果这些对象之间存在大量的重复信息&#xff0c;直接创建每一个对象会导致内存占用过高、系统性能下降。享…...

常用终端命令(Linux/macOS/bash 通用)分类速查表

文件与目录操作 命令作用说明pwd显示当前路径ls列出当前目录内容ls -l以列表形式显示文件详细信息ls -a显示所有文件&#xff08;包括隐藏文件&#xff09;cd <目录名>进入指定目录cd ..返回上一级目录cd ~回到用户主目录mkdir <目录名>创建目录mkdir -p a/b/c创建…...

Robyn高性能Web框架系列04:事件、中间件与错误处理

请求-响应过程 应用启动、关闭事件1、启动事件&#xff08;Startup Events&#xff09;2、关闭事件&#xff08;Shutdown Events&#xff09; 中间件1、前置中间件&#xff08;BeforeRequest&#xff09;2、后置中间件&#xff08;AfterRequest&#xff09;3、示例&#xff1a;…...

深入理解JavaScript设计模式之迭代器模式

文章目录 深入理解JavaScript设计模式之迭代器模式定义官方翻译白话翻译 实现jQuery中的each迭代器实现数组迭代器迭代器实现创建Dom元素 内部迭代器和外部迭代器内部迭代器外部迭代器 迭代类数组对象和字面量对象倒序迭代器中止迭代器迭代器的应用举例音乐播放器案例待输出更新…...

【项目管理】项目管理资料文档模板(ZIP,PPT,WORD)

项目交付文档 01项目详细调研计划编写规范V1.0.doc 03项目详细调研报告编写规范V1.0.doc 07软件需求规格说明书评审规范V1.0.doc 10.软件需求规格说明.doc 产品检查单,xls 工程评审.zip 软件标准过程集.zip 系统测试管理规程.docx 四)项目管理计划.doc 项目管理系统实施项目管理…...

DeepSeek中的提示库及其用法示例

《DEEPSEEK原生应用与智能体开发实践 图书》【摘要 书评 试读】- 京东图书 为了深入探索DeepSeek提示词样例的丰富内涵&#xff0c;充分挖掘其背后潜藏的无限可能&#xff0c;同时致力于为用户打造更为卓越、便捷且高效的使用体验&#xff0c;DeepSeek官网的API文档匠心独运地…...

292. Nim 游戏

292. Nim 游戏 - 力扣&#xff08;LeetCode&#xff09; 想法 枚举问题&#xff1a; n 1 ~ 3 &#xff0c;由于我先手&#xff0c;我可以直接拿走全部的石头&#xff0c;所以我赢n 4&#xff0c;由于我先手&#xff0c;我拿掉 1 - 3 块石头 &#xff0c;剩下的可能就是 1 -…...

STM32 串口通信②:蓝牙模块HC-05控制单片机

一 前言 上一篇我们已经成功实现单片机和电脑的连接&#xff0c;接下来&#xff0c;我们学习一个有趣的板块&#xff0c;HC-05蓝牙模块&#xff0c;这个蓝牙模块&#xff0c;我们就要建立手机和单片机的通讯啦&#xff0c;还是比较有趣的一个过程&#xff0c;大家可以跟着多操作…...

艾立泰数字化重塑汽车零部件包装租赁行业

在汽车零部件包装租赁行业&#xff0c;资产利用率低、流转效率差、运输成本高等痛点长期困扰企业。艾立泰科技通过数字化解决方案&#xff0c;成为该行业降本增效的关键合作伙伴&#xff0c;助力企业实现从传统管理模式向智能化的跃迁。 精准库存管理&#xff1a;告别“盲人摸…...

Windows电脑数据恢复终极指南:从原理到实战

Windows电脑数据恢复终极指南&#xff1a;从原理到实战 数据丢失是每个电脑用户都可能遭遇的噩梦。本文将为您全面解析Windows平台下的数据恢复技术&#xff0c;从基础原理到高级技巧&#xff0c;帮助您在文件误删、格式化、系统崩溃等情况下找回宝贵数据。 一、数据恢复基础…...

进入python虚拟环境的方法

首先&#xff0c;切换到虚拟环境所在的目录&#xff08;即包含venv文件夹的目录&#xff09;&#xff1a; Cmd cd D:\phd\phd1spring\July\pythonstduy\projecton 然后&#xff0c;激活虚拟环境&#xff1a; Cmd .\venv\Scripts\activate 如果上述方法不行&#xff0c;还可…...

大数据时代UI前端的变革:从静态展示到动态交互

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在大数据时代&#xff0c;信息以前所未有的速度和规模增长。这种数据环境的变化&#xff0c;深…...

海拔案例分享-门店业绩管理小程序

在各大电商平台和直播带货如火如荼来的当下&#xff0c;各行各业的门店都在积极寻求创新的管理方式&#xff0c;以提升业绩、优化运营。长沙的一家策划运营公司&#xff0c;敏锐地捕捉到这一市场需求&#xff0c;他们见过太多门店老板对着Excel表格叹气&#xff1a;美容店算错提…...

Python中的数据可视化:使用Matplotlib绘制图表

数据可视化是将复杂数据集转换为图形或图像表示的过程&#xff0c;旨在简化信息的解释和传达。Python作为一种多功能编程语言&#xff0c;提供了多种强大的库来实现这一目标&#xff0c;其中最受欢迎和广泛使用的是Matplotlib。 首先&#xff0c;我们需要确保已经安装了必要的…...

【VUE】1.准备工作

一、环境准备&#xff08;本机仅需一次&#xff09; 安装 Node.js&#xff08;推荐 LTS 版本&#xff0c;包含 npm&#xff09; 打开 VSCode&#xff0c;安装插件&#xff08;推荐&#xff09;&#xff1a; Vetur 或 Volar&#xff08;用于 Vue 支持&#xff09; ESLint / Pr…...

Linux下的版本控制器Git(15)

文章目录 如何理解版本控制&#xff08;9-0.00.00&#xff09;Git 的理解Git 的历史具体操作和用法补充细节 简介&#xff1a;那个对Git的理解&#xff0c;是我用自己的话语结合故事进行阐述&#xff0c;可能理解的不到位&#xff0c;有些错误还请多多包含&#xff01;说句实话…...

UI设计 | 审美积累 | 极繁风格(Maximalism / Complex UI)

如果极简追求“只保留必须的”&#xff0c;那极繁的设计思路就是“有条理地堆叠信息和情绪”。它不是无序的炫技&#xff0c;而是在秩序中有意识地填满视觉空间&#xff1a;字体层叠、图文混排、大量干扰信息并置&#xff0c;却又彼此克制。最终目标&#xff0c;是让用户在强信…...

MocapApi 中文文档 和github下载地址 NeuronDataReader(以下简称 NDR)的下一代编程接口

以下是 MocapApi 技术文档 github https://github.com/pnmocap/MocapApi?tabreadme-ov-file 国内可以查找getcode 英文文档 https://mocap-api.noitom.com/mocap_api_en.html 概述 MocapApi 是 NeuronDataReader&#xff08;以下简称 NDR&#xff09;的下一代编程接口&…...

c++面试题每日一学记录-C++类型转换

一、C++ 类型转换体系 C++ 提供 4 种命名转换操作符,比 C 风格转换更安全、意图更明确: 转换类型关键字主要用途安全检查静态转换static_cast相关类型转换(数值、类层次上行/下行)编译期动态转换dynamic_cast多态类型的安全下行转换运行时常量转换const_cast添加/移除 con…...