自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 从设计到代码:一步步实现 C++ 设备插件管理框架

本文从设备插件系统设计需求出发,构建一个基于C++与C ABI的插件管理框架。通过定义统一接口、封装函数表、使用模板生成适配代码,实现插件动态加载与多设备管理。以夹爪为例,演示如何编写两个不同厂商的插件,支持创建、张开、销毁操作,并通过插件管理器按ID调用。框架分离了主程序与客户代码职责,确保扩展性与安全性,适用于机器人等嵌入式设备控制场景。

2026-11-06 10:56:40 358

原创 机器人SDK通信架构设计----Half-Sync/Half-Asyn

本文介绍了一套机器人SDK通信架构设计方案,采用分层设计实现服务端与客户端的高效交互。服务端在机器人控制器侧分为异步网络层和同步执行层,通过命令分类处理(立即执行/队列缓冲/UDP直通)解决网络与SDK调用的矛盾;客户端在上位机侧通过发收分离模型和promise机制,将异步网络调用封装为同步接口,使远程调用如同本地函数般简单易用。整个架构兼顾实时性、稳定性和开发便捷性,单Worker线程设计在保证功能的同时降低了复杂度。

2026-07-08 10:15:47 212

原创 设计模式——工厂模式

本文介绍了三种工厂设计模式:1. 简单工厂模式通过一个工厂类集中创建所有对象,但新增类型需要修改工厂代码,违反开闭原则;2. 工厂方法模式为每个产品创建独立工厂,新增产品不影响现有代码,但会导致类增多;3. 抽象工厂模式用于创建产品族(如不同风格的UI组件),一个工厂生产整套风格一致的产品。三者各有特点:简单工厂最简单,工厂方法更灵活,抽象工厂适合产品族场景。

2026-05-28 17:35:19 49

原创 学习C++线程池

线程池是一种多线程处理模式,其核心目的是通过线程复用提高性能、降低资源消耗。主要优势包括:1)减少线程频繁创建/销毁的开销;2)提高响应速度(线程即时可用);3)控制并发线程数量,避免资源耗尽;4)统一管理线程生命周期。典型实现包含任务队列、工作线程集合及同步机制(如互斥锁和条件变量)。工作流程为:初始化时创建固定数量线程,任务提交至队列,空闲线程获取任务执行,任务完成后线程返回池中等待新任务。析构时先设置停止标志,唤醒所有线程安全退出。这种"空间换时间"的设计有效提升了多线程程序的效率

2025-08-25 14:32:41 896

原创 C++可变参数模版(Args... args)、std::bind/std::std::function

C++11引入的可变参数模板(Variadic Templates)支持接收任意数量的模板参数,通过参数包(Parameter Pack)和包展开(Pack Expansion)实现。该特性允许函数模板递归处理参数,并支持完美转发。文章通过示例演示了可变参数模板的基本用法,包括递归终止条件和参数传递机制,同时介绍了std::bind与可变参数的配合使用。可变参数模板极大地增强了C++泛型编程能力,是编写高效、类型安全代码的重要工具。

2025-08-25 13:41:50 934

原创 Qt plugin加载so插件

本文介绍了在Qt中使用QLibrary实现插件热加载的方法。通过QLibrary加载动态库(.so),利用resolve()获取导出函数"export_plugin_class"的地址,强制转换为特定函数指针类型后调用,获取插件接口实例。主程序通过plugin_manager管理插件,plugin_interface定义初始化、获取视图等标准接口。示例包含主项目(test_plugin)和插件项目(test_so),插件需实现导出函数并继承接口类。该方法实现了主程序与插件的解耦,支持运行

2025-08-22 10:48:35 1087

原创 C++的异步操作(std::future/std::async/std::promise)

摘要:C++提供了std::future、std::async和std::promise三种机制实现异步编程。std::future作为结果占位符,通过get()获取异步操作结果;std::async简化异步任务启动,返回future对象;std::promise允许手动设置结果。这些机制能有效减少主线程等待时间,实现结果同步和异常传递。示例代码展示了如何使用它们启动异步计算任务,在主线程继续执行其他操作的同时,需要结果时才等待获取,从而提高程序执行效率。

2025-08-15 10:07:05 1223

原创 C++中的TCP服务端与epoll关键点解读

在TCP中使用epoll,可以简单的实现IO多路复用,建立tcp是一个固话的流程,可以自行参考资料,代码众多,本文只阐述epoll与tcp结合的重点内容。

2025-04-03 10:40:48 868

原创 C++/Qt的自定义操作符

在 C++ 和Qt中,自定义操作符(operator 关键字) 的行为取决于操作符的类型和实现方式。具体来说,操作符可以是对左边的操作数有效,也可以是对右边的操作数有效,甚至可以是全局函数。

2025-03-21 18:25:07 413

原创 C++中某些函数限制只运行一次的方法

在编写代码的过程中,有些执行函数只要求被执行一次即可,但是又需要暴露出接口给用户,为了避免函数中的代码被多次执行,找到了一些方法来解决该问题。

2025-03-12 17:41:37 916

原创 C++函数返回值是引用&

在 C++ 中,函数可以返回引用(&),这是一种非常强大的特性。返回引用的函数可以直接操作调用者提供的对象,避免了不必要的拷贝,同时也可以用于实现链式调用等高级功能。以下是关于 C++ 引用作为返回值的详细说明。并且可以通过调用函数名称进行赋值,在 C++ 中,是因为函数返回的是,而引用本质上是一个别名,它直接绑定到某个变量或对象上。因此,通过引用可以直接修改原对象的值。

2025-03-10 18:13:11 735

原创 C++17 类模板参数推导(CTAD)

在某些情况下,编译器无法正确推导模板参数,或者你希望提供自定义的推导规则。这时可以使用。

2025-02-26 13:16:09 537

原创 qt使用printf输出

在qt中,一般都是使用qDebug、std::cout<<输出,printf是C语言的输出函数,当然也可以在qt中进行使用。

2025-02-25 16:01:23 1061

原创 Windows-VS使用xml-rpc-c

XML-RPC 是一种基于 XML 的远程过程调用(Remote Procedure Call, RPC)协议,它允许客户端通过网络调用服务器上的方法。XML-RPC 使用 HTTP 作为传输协议,XML 作为数据格式,具有简单、跨平台和语言无关的特点。。这是 XML-RPC 的一个重要优势,使其成为在不同操作系统和编程语言之间进行通信的流行选择。

2025-02-25 10:40:57 839

原创 C++学习之template

面向对象编程与泛型编程都能够做到不确定类型的情况下执行程序,也就是不需要写死它的类型,面向对象中的多态就是在运行时确定要执行的内容,而在泛型编程中,在编译时就能确定,C++ 中的是泛型编程的核心工具。

2025-02-22 14:57:19 357

原创 关于如何在occ的显示视图中获取AIS_PointCloud中鼠标点击的点的索引

occ获取选中点云的索引,AIS_PointCloud、AIS_PointCloudOwner

2024-12-31 09:47:49 550 1

原创 VS2017将控制台程序(CONSOLE)修改为输出窗口(WINDOWS)

最后,也有人说同时在C/C++--->预处理器---预处理器定义中写入_CONSOLE(控制台程序)或_WINDOWS(输出窗口),但是最后也没做这方面的修改,也没什么问题。2.链接器--->高级--->入口点。3.将程序改为输出窗口后,std::cout<<"xxx"<<std::endl;1.属性--->配置属性--->链接器--->系统--->子系统,将子系统中的控制台,更换为窗口。:这也是网上很多的修改方式,但是到此并没有结束。如果将程序子系统(步骤1)修改回控制台输出,步骤2不影响函数执行,s。

2023-11-23 17:43:49 3945

原创 VideoCapture访问网络摄像头

VS2017+open cv4.5.4

2023-03-04 17:14:46 1290

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除