- 博客(45)
- 收藏
- 关注
原创 [C++] QTimer与Qt事件循环机制 实验探究
之前在学Qt的的时候,老是搞不清楚Qt什么时候做耗时操作会导致UI阻塞什么时候又不会。本文通过记录学Qt时的一个小实验来探索Qt背后的核心机制—事件循环。本文代码仓库为,具体代码版本为,如果我的代码对您学习Qt、完成课程作业等有些许帮助的话,还请对该仓库点一个star,祝您生活愉快。
2025-12-03 20:44:13
1035
原创 [C++ ]qt槽函数及其线程机制
摘要:本文通过实验探讨Qt槽函数的线程机制。实验设计两个按钮分别触发奇数/偶数入队槽函数和一个出队槽函数,通过观察队列输出顺序发现槽函数是按连接顺序依次执行的单线程机制。结果表明Qt默认在主线程顺序执行槽函数,其内部使用有序连接列表管理信号-槽绑定,确保执行顺序与连接顺序一致。这一机制与Qt的单线程UI设计原则相关,避免并发操作导致的界面问题。多线程场景需显式创建线程并处理跨线程信号。
2025-11-30 23:07:32
607
原创 [C++] 上锁、解锁、获取锁、释放锁的区别
本文梳理了多线程编程中锁机制的核心概念。文章首先解释了"上锁"、"解锁"、"获得锁"和"释放锁"的区别,指出"获得锁"应理解为"获得通行证"而非被阻塞。通过lock_guard示例代码,说明了锁的生命周期:构造时上锁→获取锁→持有锁期间访问共享数据→析构时解锁→释放锁。特别强调锁机制在获得前是"锁自己",获得后就转为"锁其他线程"。这种理解方式有助于
2025-11-30 22:45:40
462
原创 [C++] lock_guard、unique_lock与条件变量wait()函数
本文比较了C++中lock_guard和unique_lock的核心区别及其应用场景。lock_guard是轻量级的RAII锁,构造时上锁、析构时解锁,不能手动解锁;unique_lock更灵活,支持随时解锁/重新上锁。关键区别在于condition_variable::wait()必须使用unique_lock,因为wait()内部需要先解锁让其他线程修改共享状态,再重新上锁,而lock_guard无法实现这一过程。应用场景建议:简单临界区用lock_guard;条件变量等待、延迟锁定等复杂场景必须用un
2025-11-30 21:53:50
273
原创 C++ 类成员变量声明语法错误
本文讨论了C++类成员变量初始化时的语法问题。在C++11之前,类内初始化仅支持= value语法;C++11引入花括号和圆括号初始化,但圆括号可能与函数声明产生歧义。文章通过示例展示了错误用法(SyncQueue<int> sq(1000))和两种正确解决方案:1) 使用花括号初始化SyncQueue<int> sq{1000};2) 在头文件中声明变量,在源文件构造函数初始化列表中初始化。特别提醒在Qt 5.11中遇到此类问题时可采用这些解决方案。
2025-11-30 20:59:01
228
原创 【C字符串与内存布局探索实验】
C字符串与内存布局实验分析摘要 通过实验探讨了C字符串的内存布局特性。实验表明: C字符串以'\0'为终止符,人为修改会导致输出异常 数组内存相邻时,破坏终止符会导致连续输出相邻内存内容 单独函数中修改终止符会产生不可控输出 内存布局分析显示栈空间由高向低增长,解释了相邻变量的输出现象 介绍了Linux/x86下的内存分段机制,包括代码段、数据段
2025-11-13 18:09:37
816
原创 【ROS2】 忽略局域网多机通信导致数据接收的bug
本地记录一次ros2开发中的bug纠错。之前系统地学习过ros1,由于ros1中需要实现多机通信需要配置,现在正在做一个ros2的项目,也没有怎么学就直接上阵了,还不知道ros2无需配置就可以实现局域网内多机通信,所以导致了如下的离谱bug。ros2中 接收数据异常,订阅一辆小车的位姿会出现在两点反复跳跃,小车不受控制等等bug,甚至可能出现明明本地什么ros节点都没有启动,但是却能使用ros2 topic list查看到一大堆话题。
2025-08-26 11:02:07
676
原创 C++ AOV 拓扑排序
本文主要记录AOV算法的实现。图论中将图分为有向图与无向图,同时还可以根据是否有回路分为有环图与无环图。软考中级经常会考到若干关于工期的安排问题:上面的图就是一个有向无环图(DAG)
2025-08-24 19:51:43
314
原创 vscode ssh远程连接ubuntu20失败的解决方法
本文记录 vscode远程连接ubuntu20云服务器,由于vscode版本太高or ubuntu20 GLIBC版本过低 导致连接失败的解决办法。
2025-06-30 17:41:54
436
原创 【Linux实训课程讲义 适用于教授Linux初学者的教学老师】
Linux基础入门指南 本文是Linux实训课程讲义,针对Linux初学者和教学老师提供系统介绍。内容包括: Linux基础概念:介绍Linux操作系统起源、特点及与Windows的区别; 主要发行版本:说明不同Linux发行版之间的关系; 文件系统详解:对比Linux与Windows文件系统的差异,包括目录结构、权限管理、命名规则等; 核心目录功能:解释根目录下/bin、/etc、/home等关键目录的作用; 基本操作指南:涵盖文件系统挂载/卸载等基础操作。 内容简洁明了,适合作为Linux入门教学参考材
2025-06-21 14:34:41
1086
原创 [Ubuntu] 记录系统崩掉进入initramfs模式后的解决方法
上图中提示我要修改sata的模式,然后我打开我Dell G3 3590一看对应的,果然是在RAID On选项上,然后直接修改,成功重启!数据也全部都还在,爽!本文主要记录我自己Dell G3 3590老电脑的Ubuntu系统挂掉的解决记录,仅为记录。不详细纠察原因,与网上的解决方法十分不同。本来已经打算重装系统啦,但是在重装的时候看到了一篇这样的博客。大致的意思就是我的ubuntu识别不到文件系统了。
2025-02-25 22:25:46
1074
1
原创 【Linux】Ubuntu中,如何创建软件的快捷方式放到桌面上
首先进入到/usr/share/applications/路径下,找到自己想要的软件,这里以我的vim为例子。本文主要介绍Ubuntu中,如何创建软件的快捷方式放到桌面上。如果不行的话,那就右键一下桌面的对应链接文件,再点击。
2025-02-24 23:10:28
765
原创 【GDB】 断点的相关设置
假设是只有一个源cpp文件编译生成的可执行程序,那么最简单的方法就是按照源代码行号打断点。//等价于b 12;这样就是在该源文件第12行设置一个断点。
2025-02-23 21:10:37
1799
原创 【C++】C++中函数返回的局部对象的生命周期
输出的顺序是由对象销毁的顺序决定的。fox2是局部对象,先销毁;fox是main()中的对象,后销毁。因此,输出为:复制GPT的回答中提到了一个函数返回对象的生命周期的点,再问…
2025-02-15 23:48:37
728
原创 【C/C++学习笔记之声明式和定义式】
在学习Effective C++的时候,看到了声明式和定义式这两个概念,突然感觉自己好像一直对这两个概念都区分不清楚。所以本文主要研究二者区别联系。在声明式的基础之上,还会进行内存的分配,同时也可以对变量进行初始化。还有一点就是,声明和定义往往可以同时进行,这也是为什么我不能将二者区分清楚的原因。int i = 0;//声明&&定义&&初始化int i;//声明&&定义&&未初始化上面的代码主要是为了搞清楚,为什么酷似变量的定义(static const int NumTurns = 5;
2023-09-24 17:25:10
569
原创 C++,Qt知识点总结
在C++中,函数重载是指在同一个作用域内定义多个函数,这些函数具有相同的名称但不同的参数列表。当你在代码中使用 const 成员函数时,编译器会强制执行只读操作,这可以防止你无意中修改对象的成员变量,从而提高代码的可读性。在C++中,凡是类中定义的函数,统统为inline函数。当我们的父类指针使用子类来进行new的时候,对应的犯法,就会去调用子类的。在一个父类下面的子类有很多的时候,父类指针可以根据不同的子类实例化,来做出不同的反应。如果没有定义,它会执行接下来的代码,如果已经定义,它会跳过接下来的代码。
2023-07-12 11:31:56
572
原创 ROS下Rviz的摄像头视频采集和标定
我需要有/usb_cam和/usb_cam/image_raw,这两个东西来为标定程序来服务。以上原因分析和解决办法,是基于我的环境来的,如果有类似的问题,请按照分析方法分析自己的原因,再看看我的解决方法是否有用。在运行了rosrun uvc_camera uvc_camera_node 之后,可以使用cheese命令检查。它会启动一些节点,其中包括了/use_cam/image_raw和/use_cam。如果,就检查一下自己的USB是不是3.x。如果还有问题,那么就去下对应的usb驱动。
2022-12-27 01:07:05
1446
原创 【计算机网络实验二-wireshark实验】
2.ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。qige.io接收到后,应该要回复一个ack包,同时,它为了断开与我的连接,也要发一个FIN包,所以这里二三两次挥手被合在一起了。刷新一次 qige.io 网站的页面同时进行抓包,你会发现不少的 304 代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。最后我的主机再回复一个ack确认位为1的包。
2022-12-18 00:25:34
2944
原创 【计算机网络实验一-验证性实验】
IPv6地址:IP协议的地址,与ipv4不同的是,它更长,容量更大,其中它的格式基本是这样的,2001:0DB8:02de:0000:0000:0000:0000:0e13,每一位都按16进制写,四位一组,一共六组。与DHCP客户端位于同意网段的DHCP服务器都会收到DHCP DISCOVER报文,DHCP服务器选择跟接收DHCP DISCOVER报文接口的IP地址处于同一网段的地址池,并且从中选择一个可用的IP地址,然后通过DHCP OFFER报文发送给DHCP客户端。当然我们的ip肯定是不一样的。
2022-12-18 00:25:02
682
原创 【类中定义过大二维数组导致段错误】
例如:项目场景:力扣刷题 5. 最长回文子串 出现内存不足bug这里可以看到,运行程序后,明明还应该有cin等待输入,但是程序直接结束啦原因分析:我在类里面定义了一个长1005宽1005的二维数组。这导致了内存溢出。所以修改为全局变量。
2022-12-05 23:43:40
474
原创 Ubuntu16 下载ros kinetic
本文主要介绍在Ubuntu16下安装ros kinetic的操作步骤参考博客相关博客提示:这里对文章进行总结:以上就是今天要讲的内容,本文简单介绍了ros的安装,以及某些踩坑的解决方法。
2022-10-31 23:01:16
706
原创 【qt实现生产者消费者】
操作系统是四大件之一,这里为了完成对应的生产者消费者实验,用qt进行了实现。本文就介绍一下怎么用qt的多线程来实现生产者消费者。(本文主要注重代码的实现,原理部分如信号量就不详细讲啦)这里讨论最简单的,一个生产者和一个消费者对一片缓冲区进行读写操作。当缓冲区满时,生产者不能再进行生产,当缓冲区为空时,消费者不能再进行消费。接下来上一段的代码,介绍一下p,v操作的实现sleep(1);//睡眠一秒 } s --;s ++;}这里两个原语操作,s可以为对应的缓冲资源,以及互斥变量mutex。
2022-10-17 11:19:04
948
原创 【Ubuntu16编译qt项目,对应的.so文件出错】
项目场景:在ubuntu下make编译qt项目代码,本来在项目文件中存在.so文件,却报错找不到对应的.so文件。
2022-10-16 17:40:26
1030
原创 Qt报错 使用信号槽,报error: ‘staticMetaObject‘ is not a member of ‘XXX‘
Qt报错 使用信号槽,报error: 'staticMetaObject' is not a member of 'XXX'
2022-10-13 12:06:45
1314
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅