C++
话与山鬼听
这个作者很懒,什么都没留下…
展开
-
Qt 访问指定目录慢 效率低 QDir QFileDialog QFileSystemModel QTableView
最近平台上使用QTableView + QFileSystemModel来自定义目录管理器然后发现部分客户端上打开目录很慢,基本要10-20秒才能响应,而且是偶发性的问题。经测试,在有访问效率问题的电脑上,使用QTableView会特别明显,QListView还没那么明显。找了很久原因没找到,测试原生的QFileDialog,一样会有效率问题。此时决定自己实现文件目录表,通过QDir来遍历目录。最终发现,QDir的entryList 和entryInfoList都一样存在效率问题。逐句调试源码发原创 2022-05-06 18:39:55 · 1885 阅读 · 4 评论 -
C++ :mmkv库中文路径下无法初始化的问题
mmkvVS窗口调试参数原创 2022-03-31 15:42:30 · 707 阅读 · 0 评论 -
DLL动态链接库分包引用及延迟加载使用
DLL动态链接库分包引用及延迟加载1.为什么要分包最近项目中有应用到比较多的项目dll和第三方dll,之前是都放在exe的平级目录下的,当dll多到一定程度时,会非常的乱。有一些库已经没有用到了,但由于第三方库直接没有归类,也不知道那些库是必须引用的,因此也没有清理。时间久了,整个目录下会显得杂乱无章,命名规范互相不同。由于项目用到了C#和C++两种语言,因此dll还存在不同的类型。虽然DLL乱不影响整体软件使用,但对于强迫症来说还是相当难受的。为了方便管理,研究出了一种dll分包依赖的管理技术原创 2022-03-15 15:45:34 · 3432 阅读 · 1 评论 -
CMake : manifest ‘build.ninja‘ still dirty after 100 tries; CMake 一直重复编译
CMake编译报错:CMake一直重复编译,停不下来,直到100次。提示为CMake : manifest ‘build.ninja’ still dirty after 100 tries;CMake Re_running经查,原因为修改过系统时间后,修改了CMakeLists.txt或者是.cmake文件。CMake在生成编译缓存时,回检测文件最后修改日期。如果文件最后修改日期>编译启动时间,就会重新生成。因此回一直卡在重复生成的步骤中。解决方案检查CMakeLists.txt或原创 2022-01-18 10:41:02 · 4965 阅读 · 9 评论 -
QDialog概率卡死问题
最近碰到一个QDialog概率卡死问题。问题是这样的:在Windows 10 家庭中文版中,特别容易出现QDialog的exec打开后卡死。而在Win10 专业版、企业版,则非常小概率出现这个问题。卡住的现象是QLineEdit光标还在,而整个程序界面动不了,但也不是没有响应。经过猜测和排查,确定了问题出现在QTimer::singleSlot()里面。原因是,我的QDialog的exec是做了延迟加载,让上一个消息循环执行完之后,再执行这个窗体弹出。代码如下:void MyClass::de原创 2021-09-01 16:22:12 · 1754 阅读 · 0 评论 -
位运算符在枚举中的应用
##位运算符在枚举中的应用枚举是被命名的整型常数的集合,在编程中是很常见的类型。在一般情况下,枚举类型用于标识对象属于什么类型,例如在计算机图形的几何分类中,点、线、面等元素类型可以用枚举来表示几何类型。在某些特殊的业务需求下,我们可能会选择枚举类型中的特定几项类型进行特殊处理,例如“修改几何实体的时针方向”这一功能,对于几何点类型来说,是不存在时针方向这一说法的,因此只能在线和面之间选择。假设现在获取到了一个几何实体,需要判断是否属于线,或者是否属于面,传统的判断方法是Geometry.Type原创 2020-08-28 16:13:35 · 1485 阅读 · 1 评论 -
不互斥的枚举
Enum枚举类中实现:一个枚举组是否包含曲中的几个枚举对象假设我有一个枚举类,这个枚举类用来修饰一个类的各种属性,枚举并不互斥,可以协同修饰一个类。或者说这个枚举用于表明这个类的各个状态。可以将这个状态标记为On或Off。假设我有一个枚举BuffStatus:public: enum BuffStatus { AttackUp = 0x01,//攻击力上升buff HurtRed...原创 2018-10-31 14:38:11 · 403 阅读 · 0 评论 -
C++ 互斥锁mutex的使用
最近项目碰到一个地方需要用到互斥锁mutex。项目中需要再渲染图层的时候初始化符号库池,但是由于渲染是多线程渲染,因此再未初始化的时候,多个线程都会去初始化符号库池SymbolCatalogPool。SymbolCatalogPool是一个单例类,多次初始化会造成不必要的损耗和冲突,因此需要用到mutex。原来的代码实现为:SymbolCatalogPool* SymbolCatalogPo...原创 2018-12-08 14:53:36 · 9180 阅读 · 0 评论