- 博客(62)
- 资源 (1)
- 收藏
- 关注
原创 QT 中场景坐标
但是如果设置了setSceneRect 矩形区域的话 ,也就是场景的左上角的坐标。这个时候 左上角的坐标 就和 view窗口的左上角 原点重合了。也就是0.0点 view 会自适应这个 原点坐标。场景坐标的原点永远是是 笛卡尔坐标系的原点。
2024-07-27 23:44:27
224
原创 python 多线程
系统创建多进程的机制是不一样的,linux 系统的子进程会clone 父进程的。在使用多进程在linux 系统中要注意 linux 系统的机制和window。所以这个时候 文件打开,数据库操作等等 要重新连接 重新打开文件等等。文件描述符,这样也就导致了 父进程的文件的读写位置和子进程是一样的。python 中有全局锁GIL 所以在计算密集型的程序中。要使用多进程的方式 代替多线程计算。
2024-07-14 13:02:33
125
原创 python_pandas
所以会有时候定位数据,要分清楚 索引和标签。列使用标签 标签也就是 表头。还有个轴 axis 的概念。0 为横轴 1为纵轴。
2024-06-12 17:30:30
133
原创 CMake是怎么找到Qt相关模块的
一般我们不会在CMakeLists里面硬编码CMAKE_PREFIX_PATH,推荐通过环境变量找到模块。深入了解find_package之后,我们就明白COMPONENTS其实是一个选项,列出来了必选的模块。当我们使用QT创建了一个CMake项目后,我们尝试使用CMake编译时,会遇到找不到Qt的模块的问题,Qt的模块是放在Qt/5.15.2/clang_64/lib/cmake,所以我们只需要配置。记得将QT_DIR环境变量放到PATH中,因为find_package会从PATH中寻找。
2024-05-28 11:26:33
617
原创 信号量--
Semaphore,对多线程有过了解的人都听说过,一般我们解释为“信号量”。可是,这个单词对我们来说还是比较陌生,它和另一个单词 Singal(信号)什么关系呢?想要真正理解这个概念,必须得从它的翻译开始。事实上,Semaphore 最好的翻译应该为“信号计数量”,承认了这一点,想必你也清楚了:它和 Signal 不是一回事!这个信号计数量 === 计数量 是很准确的翻译。
2024-05-24 14:17:34
150
原创 QT movetothread
之后 会调用 Qthread 中的run 函数 ,run函数 执行 exec 函数。如果自己重载 run 函数 ,那么也可以,但是如果不执行 exec 启动消息循环。今天在次看 官方文档 Qthread --> call Start 函数。启动消息循环 ,这样只要线程不退出 就可以一直处理 消息。之前一直不明白为啥把对象 移动到线程之后。也就能处理 跟这个线程 相关的槽函数了。他的槽函数 就会在 新线程程中运行了。就不能处理 线程关联的对象的槽函数了。关于movetothread 的。
2024-05-16 18:16:34
188
原创 opengl 坐标系理解
在固定功能绘制管线情况下,默认OpenGL中model-view与projection矩阵都是单位矩阵。默认3D 物体的自己的坐标系是和世界坐标系重合的。世界坐标系是原点默认也在屏幕的中心点。如果没有应用任何变换,对象坐标系、世界坐标系、照相机坐标系和裁剪坐标系是重合的。
2023-11-06 11:48:37
115
原创 ldd notfond问题
是因为 系统的默认搜索路径找不目标so. 这个时候 设置一下系统环境变量。linux ldd 分析找不到 so 动态库的时候。LD_LIBRARY_PATH 系统环境变量就好。
2022-12-11 17:12:12
589
1
原创 C++ 随笔
成员函数 还是单独存在的。就是在成员函数被调用的时候把this指针传递给成员函数,当访问成员数据时候。在内存中看C++类和结构体是一样的 当C++类实例化的时候。就是会被计算个内存大小。只不过是C++类有些特性 继承 虚函数 多重继承 菱形继承等 这些额外增加了些内存。之后 把类中的成员数据存在那块内存。可以多学习C++汇编。
2022-11-29 14:51:47
632
原创 计算机补码
高级语言直接在编译阶段或者运行阶段 把负数转换成 补码的二进制数字,之后传递给计算机计算就行了。计算机是二进制电路 也就意味数字也是二进制的电路。那么补码的存储也就是一种电路表示而已 ,
2022-11-23 11:07:47
128
原创 物理内存的分页
二级页表:一级页表映射4MB(2^22)、二级页表映射4KB,则需要1K个一级页表项(4GB / 4MB = 1K, 2^10个一级页表项)、每个一级页表项对应1K个二级页表项(4MB / 4KB = 1K),这样页表占用4.004MB(1K * 4B + 1K * 1K * 4B = 4.004MB)的内存空间。程序可以独享4GB的线性地址。对于4GB线性地址而言,每个页4KB,则总共可以分成1024*1024=1048576个页面。那么这地址是几位呢,也就是物理地址总线的长度,32位的就是 4个字节。
2022-11-22 00:07:35
710
原创 nullptr用法
是一种特殊的拷贝,利用的是C++11新引入的移动构造函数和移动赋值运算符性质。换言之,这不是拷贝,这是移动。再来看下右值引用的绑定问题,由于解引用操作符生成左值,取地址运算符生成右值,所以指针nullptr是一个右值,可以被绑定到unique_ptr的移动操作构造函数/移动赋值运算符上。首先,nullptr是C++11新标准下引入的一种特殊类型的字面值, 它可以被转换为任意其他的指针类型。其次:nullptr_t的定义看下:typedef decltype(nullptr) nullptr_t;
2022-11-15 22:31:53
468
原创 操作系统分页管理
比如4级页表 可能对应的页大小就G的大小。3级对应M 的大小 2级对应K 的大小。1级还是对应页内偏移,最终找到了实际的物理地址。之前总是不理解 多级页表查询机制。现在想 道理应该是这样的。分的级越多 也就对应页的大小就越大 也可以这么理解 至此。操作系统管理内存使用分页机制。每个页大小4K 这样进程在存储每一页的地址,在加上 页内偏移就能得到实际的物理地址。这个需要mmu 这个转换支持。
2022-11-07 16:42:12
239
原创 GCC 编译器常用选项
S 输出编译后的汇编代码文件 gcc a.c -o a.s -S。-c 输出链接后的可重定位文件 gcc a.c -o a.o -c。-E 输出预处理后的代码文件 gcc a.c -o a.i -E。-g 在编译结果中加入调试信息 gcc a.c -o a -g。-o 指定输出文件名 gcc a.c -o a。GCC 编译器常用选项。Linux 编程环境。
2022-11-01 17:58:28
404
原创 DDS 的动态数据类型转换有感
在阅读DDS类型的 动态类型时候,发现有个dds::core::xtypes::DynamicType。要解决这个问题 只能是使用模板技术 抽象出个个的实际类型 ,动态赋值了。这种宏替换可以解决在不知道类型是啥的时候,动态生产出可以执行的代码。突然想到了 C 语言的宏替换,宏替换是可以生产原始类型替换。这种类型可以自动根据字符串 决定数据的是那个类的。这样的用处就是根据字符串动态的生产可以编译的代码。但是拿到的是字符串 怎么把字符串变成实际的类型呢。替换之后 编译器在根据实际的类去编译。
2022-10-25 14:51:36
340
原创 解释型语言感想
所以你也可以看到有的编译器是有硬件厂家提供的,比如Intel就提供C和C++的编译器,这样编译出来的程序就能更好的利用硬件的性能。那是因为linux是开源的,因此就可以将它移植到不同的CPU平台上,然后在用相应的编译器编译,就得到了可以在该CPU上运行的二进制代码了。而Windows是封闭的,得不到源代码,而MS自己又没有移植到别的CPU平台上的打算,所以当然就只能在X86上运行了。(BTW,X86也是性能最好的CPU之一,而Windows对性能要求较高,所以MS当然也就不愿意移植了)
2022-10-24 23:33:25
528
原创 win32的默认窗口处理函数
我在想 如果把这个函数注释掉会是什么情况呢,DefWindowProc(hWnd, message, wParam, lParam);果然如果把这个函数处理掉就无法创建窗口了 CreateWindowW();也就间接的说明,窗口处理函数在。在窗口还没有被画出来的时候就已经在工作了,还想到有 precreate 事件可以拦截。今天学习QT的事件机制,就想到了win32的窗口处理函数。
2022-10-22 19:28:48
176
原创 模板传递参数
也可以 赋值 移动 拷贝 ,去地址 传指针等 ,就是看上去 带个 尖括号 没有与原始的C++ 类这么 看上去友好罢了。突然想通这个问题 模板也是可以 传递指针的,其实编译器实例化模板之后 和 普通的C++ 的类其实是 一样的。
2022-10-17 16:22:53
245
原创 去除整个字符串中的字符
为了去除整个字符串中的“.”,boost库中就是一句话boost::erase_all(str, ‘.’),但是stl库中没有现成的接口可以使用,求助Google,发现了erase和remove结合使用可以达到目的;// 删除local字符串中所有的’.’remove 函数实现的逻辑是 使用后面的值 把前面的值得覆盖掉 但是容器中剩余元素并没有被删除所以要结合 erase 在执行实际的删除操作{=last) {if (!
2022-10-08 22:57:01
473
原创 linux动态库实现单例模式
并没有按照预期的数据都是统一一份。exe 中的数据并没有传递到动态库中。这个gcc 的编译特性、今天写代码 linux 动态库中实现的单例类,在外部exe 调用实现的时候。需要在编译的时候加个 编译参数。......
2022-08-26 22:09:21
342
原创 gitlabe设置ssh_key记录
在使用gitlab 管理远程仓库时候,可以添加sshkey 之后在重新 把代码从远程仓库clone 下来之后。就可以不用在每次输入用户名和密码了。这个在linux 系统发现的,估计windows 不会这样。
2022-08-26 12:43:10
173
原创 git合并冲突解决方法
git合并冲突解决方法1、git merge冲突了,根据提示找到冲突的文件,解决冲突如果文件有冲突,那么会有类似的标记2、修改完之后,执行git add 冲突文件名注意:没有-m选项进去类似于vim的操作界面,把conflict相关的行删除掉4、直接push就可以了,因为刚刚已经执行过相关merge操作了相关的操作如下冲突产生[root@Monitor Demo]# git branch #当前在master分支下。
2022-08-20 14:25:27
10231
原创 【无标题】
本文主要讲解初学者在linux使用rti connext dds运行hello world程序的步骤。DDS域(Domain)和域参与者(Domain Participant)rti connext dds 例子程序_菜鸟小清新-程序员秘密。技术标签: rti connext dds 分布式。命令行:vim .bashrc。lifespan 使用寿命。...
2022-08-16 19:13:11
251
原创 c++ notify_one()和notify_all()
但c++是不需要上锁调用的,如果在锁里调用,可能会导致被立刻唤醒的线程继续阻塞(因为锁被notify线程持有),但c++标准上也说,一些实现(尤其是许多 pthread 的实现)为了归避这种情况,在通知调用中,直接将等待线程从条件变量队列转移到互斥队列,而不唤醒它,来避免此"hurry up and wait"场景。因为锁被notify线程持有 这句话很重要 也就是 调用notify 函数时候 当前锁如果还是lock 状态,那么被唤醒的线程 此时并不能获取锁的资源。...
2022-08-15 22:29:40
1471
原创 Linux环境变量设置
2)PATH缺省包含了Linux系统命令所在的目录(/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin),如果不包含这些目录,Linux的常用命令也无法执行(要输入绝对路径才能执行)。虽然设置环境变量的方法有多种,但是建议系统环境变量建议在/etc/profile.d目录中配置,用户环境变量在用户的.bash_profile中配置,不建议在其它脚本文件中配置环境变,会增加运维的麻烦,容易出错。用户登录时执行/etc/profile文件中设置系统的环境变量。..
2022-08-14 11:25:29
4475
原创 Unity在mac平台下开发记录
文件夹,把C#的DLL放到里面就好了,C++的DLL也是放到这个里面的(当时好像是要放到对应的系统平台X86X64这些文件夹中)。但是可以在nuget下载C#的包之后,找到下载的DLL之后,在unity中新建一个plugins。在mac中是rider编译器中使用微软的nuget包的方式添加额外的包。是无法在unity识别的,unity中的包要手动导入,这种程序集的方式需要。看官网有自定义包和其他包的导入方式,unity有自定义的包格式,...
2022-08-02 14:08:40
845
原创 vs开发DLL笔记
今天的学习笔记使用vs 创建一个动态库工程在.h文件中设置到处函数声明`extern "C" { _declspec(dllexport) int Add(int a, int b); _declspec(dllexport) int Sub(int a, int b);}在CPP文件中写函数的实现代码int Add(int a, int b) { return a + b;}int Sub(int a, int b) { return a - b;}此时如果 在CPP文
2022-05-14 16:30:18
296
原创 无管理员权限下复制文件
今天发现一个有意思的问题在没有管理员权限的programfile86文件夹下面的子文件夹复制文件时候会提示 没有权限复制文件这个时候重命名文件之后,在复制就可以了。
2022-03-22 22:24:55
336
原创 QT 5.12 配置控制台输出
QT 5.12配置控制台输出CONFIG += console还需要选择运行在终端就可以看到输出的cmd命令行了。
2022-03-21 21:40:21
565
1
原创 win线程栈
【Windows】线程漫谈——线程栈本系列意在记录Windwos线程的相关知识点,包括线程基础、线程调度、线程同步、TLS、线程池等。预备知识众所周知,线程在初始化时,系统会为其分配线程栈,用于局部变量、函数调用时的参数等。在开始讨论前,先交代一些背景知识。栈:一种先入后出的数据结构,push和pop是它典型的操作,对应“入栈”和“出栈”的术语。系统内存的分配机制:简单的说包括“预订”和“调拨”两个过程。预订并不真正分配物理存储器,只是对进程虚拟地址空间中的内存进行“预分配”,以使得这块内存不至于
2022-03-06 13:16:56
534
原创 GetModuleFileName函数不安全吗?
千里之堤毁于蚁穴,在看似缜密的认证逻辑中却存在安全漏洞:HPSupportSolutionsFrameworkService使用Process.MainModule.FileName获取Client的文件路径,随后验证其文件签名。然而,在C#中Process.MainModule.FileName是通过调用GetModuleFileName()索引进程的PEB (Process Environment Block)来获取模块路径的。PEB位于进程的用户空间中,因此可以被攻击者修改替换。攻击者只需在连
2022-02-16 15:42:12
2937
原创 C++ 类型转换
C++的 动态类型转换 dynamic_cast 操纵符是怎么计算类型信息的type_id的类型转换操作符号在C++中有个 typeinfo 的类型 这个类型中保存了 C++的编译后的类名编译器会对类名进行修饰,生成一个字符串信息,这个信息保存在类的虚函数表中,dynamic_cast 当使用这个 操作的时候 回去虚函数表中查询 在跟自己typedid的返回值对比 如果一致就可以转换成功。static_cast仅仅是依靠类型转换语句中提供的信息来进行转换,而dynamic_cast则会遍历
2022-02-16 15:38:33
151
原创 C++操作符
突然想到了 操作符 的概念。操作符 是编译器帮助实现的某些操作比如 sizeof关键字也 语言要支持的一部分 需要编译器实现new 就是这样的 C++的关键字
2022-02-15 18:23:56
425
原创 函数调用栈
在 学习函数调用栈的时候。区分调用者函数 和 被调用函数调用者负责 压栈调用参数,从右向左入参 压入返回值,被调用者负责 开辟自己的 堆栈环境,调整 ebp 和 esp的相地址。 这两个寄存器保存了地址指向了系统的栈空间。call 指令执行之后 就进入了 被调用函数中 执行了。C语音为了支持可变参数传递之后的 栈平衡调用者清理栈空间,因为调用者知道有几个参数压栈 实现了可变参数的支持call 指令之后 执行 add esp xx数值。增加了空间被调用者 会在返回值得时候写死 ret xx数值
2022-02-14 21:24:01
172
原创 C++模板的类的展开
突然明白了C++模板的类的展开也就是C++模板的递归template<int i>struct sum { enum { value = i + sum<i-1>::value };};// 对i = 1特化template<>struct sum<0> { enum{ value = 1 };};int main() { std::cout << sum
2022-02-08 23:42:04
816
原创 QT杂记。
操作系统创建线程的过程,是在内核中创建一个内核的线程对象,之后把当前线程函数的的地址,赋值个这个内核对象之后操作系统负责这个线程的调度线程有自己的栈环境,有自己的上下文寄存器环境,最近看QT的文章记录到说 QObject 对象 或者继承这个对象的实例QObject对象类中有复杂的数据,估计其中有包含这个线程对象的引用,标记这个对象属于那个线程。QT的对象树结构 和QT的对象集成关系是不同的概念,QT的对象树原则是一套独立的系统,QT框架自己维护一套 父子对象树,更继承关系的父子不一样哦哦。所
2022-01-28 18:26:35
911
原创 SQLite3 事务与锁状态描述
sqite 3 保证了写操作的同步原语,可以做到多进程写的同步。一、SQLite3 事务与锁状态描述SQLite3总共有三种事务类型:BEGIN [ DEFERRED /IMMEDIATE / EXCLUSIVE ] TRANSCATION,提供以下五种的文件锁状态,按锁的级别依次是:UNLOCKED / SHARED / RESERVERD / PENDING / EXCLUSIVE。1). UNLOCKED:无锁 文件没有持有任何锁,即当前数据库不存在任何读或写的操作。其它的进程可以在该数据库
2022-01-25 16:28:30
672
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人