- 博客(25)
- 收藏
- 关注
原创 操作系统知识
IPC 方式数据拷贝次数核心优势核心劣势适用场景效率等级共享内存0 次效率最高,无内核中转需手动同步,安全性低高频大数据交互(如帧数据传输)⭐⭐⭐⭐⭐信号无(无数据)异步紧急通知,响应快无法传数据,可能丢失紧急事件(如进程中断、异常通知)⭐⭐⭐⭐⭐管道 / FIFO2 次实现简单,适合小数据半双工,FIFO 限制父子进程 / 无亲缘进程小数据同步⭐⭐⭐⭐消息队列2 次按类型读,异步通信容量限制,大数据低效结构化小数据异步交互(如日志)⭐⭐⭐。
2025-11-27 09:40:24
871
原创 gdb调试死锁
定义:资源具有排他性,即,其他线程必须等待该资源被释放后才能使用。解释:这是死锁产生的基础。如果资源可以被多个线程同时访问(如读写锁的 “读模式”),则不会因争夺该资源而产生死锁。示例:打印机、独占锁(如std::mutex)都是互斥资源。当线程 A 持有mutex1时,线程 B 必须等待 A 释放mutex1才能获取。,且在等待过程中不释放自己已持有的资源。解释:线程在获取资源时并非一次性获取所有需要的资源,而是先持有部分资源,再等待其他资源,这就可能导致多个线程互相等待对方的资源。
2025-09-03 14:02:06
415
原创 OpenCV-CUDA 图像处理
线程:最小执行单位,有私有内存,通过索引区分工作线程块:线程的集合,支持共享内存和同步,有硬件数量限制网格:线程块的集合,覆盖整个问题空间,线程块间无直接同步内核:GPU上执行的函数,由整个网格的所有线程共同执行。
2025-09-01 20:44:55
1519
2
原创 C++ 线程状态
线程对象已创建,但尚未调用start()方法,此时线程尚未开始执行。线程调用start()后进入就绪状态,此时线程已具备运行条件,等待CPU调度。在多线程环境中,多个线程可能同时处于就绪状态,由线程调度器(操作系统或虚拟机)决定哪个线程获得CPU时间。线程获得CPU资源,正在执行run()方法中的代码。同一时刻,一个CPU核心只能运行一个线程(多核CPU可同时运行多个线程)。线程暂时停止执行,放弃CPU资源,等待特定条件满足后重新进入就绪状态。
2025-08-26 16:25:47
983
原创 Qt多线程的几种实现方式
Qt 提供了多种多线程实现方法,选择需根据场景判断:简单任务:继承QThread重写run();(推荐);;。核心原则是减少共享资源,通过信号槽或事件实现线程间通信,确保线程安全。理解每种方法的适用场景和局限,才能在实际项目中高效运用多线程技术。
2025-08-19 15:36:42
855
原创 Qt消息队列
事件是 Qt 框架中用于描述各类发生的动作或状态变化的对象,它可以是用户与应用程序的交互行为,也可以是系统内部的状态改变或定时触发的动作等。这些事件会被 Qt 框架捕获并处理,以实现应用程序对不同情况的响应。Qt 的事件是描述各类动作和状态变化的对象,而事件队列则是管理这些事件的核心机制。通过 “入队 - 循环 - 处理” 的流程,事件队列支撑了信号槽的跨线程通信、UI 交互响应等关键功能。
2025-08-19 15:26:11
950
原创 Qt信号与槽
信号与槽是 Qt 事件驱动模型的核心,其底层通过元对象系统的预编译元数据和运行时动态调度,实现了灵活、安全、低耦合的对象间通信。这一机制不仅简化了 UI 交互逻辑(如按钮点击触发业务处理),也为跨线程通信、模块化设计提供了强大支持,是 Qt 框架区别于其他 C++ 库的标志性特性。
2025-08-19 14:58:21
593
原创 Qt原对象系统工作机制
元对象系统的工作机制是 “编译期预生成元数据 + 运行时动态解析调度” 的完美结合:编译期:moc 解析 Q_OBJECT 相关语法,生成包含元数据(staticMetaObject)、信号实现、qt_metacall 等的代码,为动态功能提供 “数据基础”;运行时:通过 QMetaObject 访问元数据,结合 QObject 的连接列表和事件队列,实现信号与槽通信、动态属性操作、反射调用等功能,且保证跨线程安全。
2025-08-19 14:24:46
831
原创 Qt元对象
元对象系统通过 “预编译生成元数据 + 运行时动态调度” 的设计,弥补了 C++ 静态语言的局限性,使 Qt 能够在保持 C++ 性能优势的同时,提供灵活的对象通信、动态属性等高级功能。理解元对象系统,是掌握 Qt 信号与槽、多线程等核心技术的基础。
2025-08-19 13:59:36
879
原创 编译和运行过程中的内存四区
区域编译阶段(磁盘文件)运行阶段(内存)核心功能代码区以机器指令存储在.text 段加载到内存只读区,CPU 执行指令存储程序执行逻辑全局区以.data(初始化变量)、.bss(未初始化变量)、.rodata(常量)存储加载到内存,BSS 段初始化 0,常量区只读存储全局 / 静态变量、常量,生命周期全局栈区无实体(仅记录局部变量 / 参数类型)函数调用时动态分配,返回时释放支持函数调用,存储临时数据堆区无实体(仅记录动态分配函数的调用)
2025-08-19 10:40:13
1108
原创 C++智能指针
int* count;if (this!release();++(*count);release();特性unique_ptrshared_ptrweak_ptr拥有所有权✅✅❌(观察者)是否可复制❌✅✅(但不延长生命周期)引用计数❌✅✅(不参与计数)占用内存最少较多(带计数)最多(带弱引用)使用场景唯一资源拥有。
2025-08-05 16:31:15
369
原创 std::move使用
名称是否有名字是否可取地址典型例子能否绑定到左值引用能否绑定到右值引用左值是是变量、函数返回左值是否右值否否(一般)临时变量、表达式结果否是左值引用int&只能绑定左值否右值引用int&&否(除非用 std::move)只能绑定右值private:char* data;public:std::cout << "构造函数\n";std::cout << "析构函数\n";// 拷贝构造函数(深拷贝)std::cout << "拷贝构造\n";
2025-08-05 16:24:55
994
原创 C++多线程之条件变量
条件变量是线程同步机制之一,作用是让线程等待某个条件发生,当条件满足时被其他线程通知继续执行。生产者线程:负责生产数据,放入缓冲区。消费者线程:负责从缓冲区取数据,进行处理。两者通过一个共享缓冲区协同工作,需要同步机制保证线程安全和协调。组件作用及注意事项std::mutex保护缓冲区数据和条件变量状态,防止数据竞争让线程等待条件发生,支持高效通知和避免忙等待自动释放锁,避免虚假唤醒,等待条件满足唤醒一个等待线程,避免惊群效应唤醒所有等待线程,广播结束信号或多线程通知共享缓冲区。
2025-08-05 15:29:32
422
原创 常用点云特征计算
特征维度是否需要法向计算复杂度表示能力适用法向量3低表面方向重建、配准曲率1是低表面弯曲性分割、边缘提取PFH125是高Ok2O(k^2)Ok2精细局部结构高精度配准FPFH33是中OkO(k)Ok局部描述 + 快速实时配准。
2025-07-24 10:49:26
1169
原创 点云处理概述
点云(Point Cloud)是空间中一组三维坐标点的集合,通常来源于激光雷达(LiDAR)、深度相机(如Kinect、RealSense)或结构光设备。(x, y, z):三维坐标可选信息:强度、颜色(r, g, b)、法向量、时间戳等点云的特性特性描述稀疏性点云是对连续表面的离散采样,通常不规则且稀疏。无拓扑结构与图像不同,点云没有天然的二维网格结构。高维属性除了 (x, y, z),还可附带强度、颜色、法线等属性。点云数据量大、无拓扑结构、噪声多、不规则,因而处理步骤较复杂。点云采集↓。
2025-07-24 09:41:35
842
原创 设计模式之工厂模式
适用于产品有多个系列,比如一个 GUI 工厂可以生产 Windows 和 Mac 的 Button、TextBox、CheckBox 等组件。
2025-07-23 16:47:49
429
原创 设计模式之观察者模式
观察者模式是一种行为型设计模式,定义了一种一对多的依赖关系,使得当一个对象(称为目标对象或被观察者)状态发生改变时,所有依赖于它的对象(称为观察者)都会得到通知并自动更新。
2025-07-23 16:24:29
357
原创 C++ Template
🎯 一句话理解什么是模板C++ 模板(Template)是实现**泛型编程(Generic Programming)**的机制,支持编写与类型无关的代码,编译器在编译期间生成特定类型的代码实例。🧩 模板分类:编写通用函数,适配不同类型。:编写通用类,比如容器类、数据结构等。
2025-07-23 16:02:13
876
原创 网络编程基础
OSI 模型更细致、理论性强;TCP/IP 模型更实用、应用广泛。因为 TCP 是全双工通信第一次:客户端 → 服务端:关闭“发送”方向;第三次:服务端 → 客户端:关闭“发送”方向;每次关闭都需要确认(ACK),所以共四步。SYN → SYN+ACK → ACK(彼此准备就绪)TCP:可靠传输,适合要求“准时、完整”的数据通信。UDP:不可靠但快速,适合“实时性高、丢点无所谓”的应用。当然可以,下面是。
2025-07-22 10:03:58
885
原创 Ubuntu22.04安装opencv4.8.0
opencv下载网址:https://opencv.org/releases/;opencv_contrib下载网址:https://github.com/opencv/opencv_contrib,点击Tag选择对应版本号。如果已安装anaconda,在bashrc或者/etc/profile中注释调导入环境变量语句,安装完成后重新添加到环境变量中即可。
2025-07-17 11:40:12
551
原创 Open3d库的安装(windows)
`-DCMAKE_INSTALL_PREFIX="D:\Open3D-0.17.0\install"` 指定安装路径为 "D:\Open3D-0.17.0\install"。这是在构建项目后,将生成的文件复制到该位置的路径。此选项用于是否构建python模块,个人建议设置成OFF,否则可能因为python环境导致pybind error的错误。,则项目将会构建共享库,此时windows库的运行链接方式为MT;,则项目将构建静态库,此时windows的库的运行链接方式为MD。# python版本。
2023-10-10 11:57:29
918
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅