自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

上官宏竹的专栏

技术的记录和分享

  • 博客(106)
  • 资源 (7)
  • 收藏
  • 关注

原创 unordered_map详解和性能分析

std::unordered_map是C++标准库中的一个关联容器,它可以存储一组键值对,并且支持快速的查找、插入和删除操作。class Ty,std::hash是一个模板类,它接受一个类型参数T,用于指定需要哈希的对象类型。还提供了一个函数调用运算符(operator()),用于计算对象的哈希值。perator()接受一个常量引用key,用于指定需要计算哈希值的对象。它返回一个类型的哈希值,表示对象在哈希表中的桶位置。实现一个哈希函数。

2023-03-12 17:00:32 16592 1

原创 用Python求两条线段的交点,包括延长线的交点

【代码】用Python求两条线段的交点,包括延长线的交点。

2023-02-06 17:55:39 1233

原创 优先级反转问题及解决办法

优先级反转,是指在多线程的环境下,并且使用了信号量时,可能会出现的这样一种不合理的现象,即:高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。从现象上来看,好像是中优先级的任务比高优先级任务具有更高的优先权。具体来说:当高优先级任务正等待信号量(此信号量被一个低优先级任务拥有着)的时候,一个介于两个任务优先之间的中等优先级任务开始执行——这就会导致一个高优先级任务在等待一个低优先级任务,而低优先级任务却无法执行类似死锁的情形发生。

2023-01-04 22:56:23 2650 1

原创 Windows平台下的内存泄漏检测

Windows平台下面Visual Studio 调试器和 C 运行时 (CRT) 库为我们提供了检测和识别内存泄漏的有效方法,原理大致如下:内存分配要通过CRT在运行时实现,只要在分配内存和释放内存时分别做好记录,程序结束时对比分配内存和释放内存的记录就可以确定是不是有内存泄漏。

2023-01-01 22:19:54 1540

原创 Linux内存泄漏检测方法总结

Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。Valgrind的体系结构如下图所示内存检测方式无非分为两种:1、维护一个内存操作链表,当有内存申请操作时,将其加入此链表中,当有释放操作时,从申请操作从链表中移除。

2022-12-20 21:08:42 6164

原创 Linux内存分配原理

进程调用C=malloc(200K)以后,内存空间如图4:默认情况下,malloc函数分配内存,如果请求内存大于128K(可由M_MMAP_THRESHOLD选项调节),那就不是去推_edata指针了,而是利用mmap系统调用,从堆和栈的中间分配一块虚拟内存。这样子做主要是因为brk分配的内存需要等到高地址内存释放以后才能释放(例如,在B释放之前,A是不可能释放的),而mmap分配的内存可以单独释放。也就是说,如果用malloc分配了A这块内容,然后从来不访问它,那么,A对应的物理页是不会被分配的。

2022-12-17 17:43:30 930

原创 C++11新标准

构造函数参数依靠C++11提供的initializer_list类模板,即可以获得列表初始化时的参数列表。return 0;}public:People(initializer_list l) { // initializer_list的构造函数for (;i!= l.end();++i)}

2022-11-30 22:58:34 483

原创 QT必备知识

QT 中的模型/视图机制支持多种不同的数据源,例如内存中的数据、数据库中的数据、XML 文件中的数据等。具体来说,使用 Q_OBJECT 宏定义后,编译器会为该类生成一个 QMetaObject 对象,该对象包含了该类的元对象信息,包括类名、信号和槽的名称、参数类型等等。如果在一个子线程中,这个子线程没有运行事件循环,那么这个对象的删除,将在子线程结束时删除。QObject被设计成在一个单线程中创建与使用,因此,在一个线程中创建一个对象,而在另外的线程中调用它的函数,这样的行为不能保证工作良好。

2022-11-30 14:22:55 2327

原创 面试题目记录

第一,不要在你希望能移动对象的时候,声明他们为const。参考:https://cntransgroup.github.io/EffectiveModernCppChinese/5.RRefMovSemPerfForw/item23.html。Lambda实现原理:参考https://www.zhihu.com/question/57241113/answer/2440288161。参考:https://blog.csdn.net/bureau123/article/details/121300979。

2022-11-30 14:22:33 921

原创 网络面试知识

客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。3:得到了 IP 以后,向服务器发送 TCP 连接,TCP 连接经过三次握手。第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。4:接受 TCP 报文后,对连接进行处理,对 HTTP 协议解析。

2022-11-30 12:25:42 885

原创 开播客户端

应用层UI在对应的位置去遍历插件的属性接口,拿到属性后,根据对应的类型创建不同的UI。插件都是作为一个独立的动态库存在,对外抛出插件定义个接口,在libobs中合适的时候通过dlopen打开插件库,调用具体的接口。主要是实现几个插件的接口:创建(创建回调)、销毁、update(属性更新)、video_render(视频渲染)等接口。编解码器属性:编解码器插件把对应的自己的数据注册到创建的属性中,UI层通过对应的编解码器获取到对于的属性。可以使用窗口采集的BitBlt方式(桌面也是窗口的一种)。

2022-11-21 15:19:00 312

原创 面试常用算法归纳

注意:这里需要使用一个pair记录前一个dp[i]的最长子串的始末位置,在判断s[i]与s[i-1]不等时,需要继续往前判断s[i]是否包含在前一个dp[i-1]的子串中,如果在,则当前的dp[i]需要减去dp[i-1]子串的前一部分。对于二维dp的状态转移方程,大致都会是要从左、上及左上三个方向来推导,即:dp[i][j] = max(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])。对于dp[i]的定义为:以s[i]为结尾的【无重复字符的最长子串】的长度。

2022-11-17 20:48:56 3023

原创 C++模板

那么DequeStack和 Stack代表的是同一种类型。推断指引是用来提供额外的模板参数推断规则,或者修正已有的模板参数推断规则。比如你可以定义,当传递一个字符串常量或者 C 类型的字符串时,应该用 std::string实例化 Stack 模板类:这个指引语句必须出现在和模板类的定义相同的作用域或者命名空间内。通常它紧跟着模板类的定义。后面的类型被称为推断指引的”guided type”。现在,根据这个定义:聚合类(这样一类 class 或者 struct:

2022-11-09 17:55:02 367

原创 工程配置手册

lldb使用教程:https://www.jianshu.com/p/6e6bb0d0ee78。

2022-11-09 17:07:35 80

原创 QT多线程之:moveToThread

并非是将a实例相关的所有的工作“移动”到了m_thread线程,而是将所有a实例相关的事件托管到m_thread线程执行。换句话说,就是通过信号槽connect或者invokeMethod触发a实例中槽函数产生的事件,将会被放置到m_thread线程中执行。只有在线程启动后,并且通过信号槽和invokeMethod调用,且是队列的方式,才能让QOject子对象的show函数跑在子线程中。需要用Q_INVOKABLE声明,invokeMethod才能调用,否则会找不到show这个接口。

2022-11-07 17:05:47 1777

原创 编辑器系统设计

(x, y)

2022-11-07 11:28:29 352

原创 C++关键函数

拷贝构造函数的目的是用其它对象的数据来初始化当前对象,并没有期望更改其它对象的数据,添加 const 限制后,这个含义更加明确了。另外一个原因是,添加 const 限制后,可以将 const 对象和非 const 对象传递给形参了,因为非 const 类型可以转换为 const 类型。如果没有 const 限制,就不能将 const 对象传递给形参,因为 const 类型不能转换为非 const 类型,这就意味着,不能使用 const 对象来初始化当前对象了。

2022-11-06 20:18:33 94

原创 C++智能指针

智能指针也是一种模板类型,既然是类型,就依旧存在是栈空间还是堆空间上的问题。而如果这个智能指针是作为一个类的成员变量而存在,那么智能指针所管理的堆内存,是在这个类的实例析构时,析构这个成员变量时,决定是否释放智能指针所管理的堆内存的。lock成员获取到的shared_ptr shared_p指针,创建一个临时对象,这个临时对象同样指向shared_p,即使shared_p执了reset这样的delete引用的操作,弱引用对象仍然持有改智能指针的地址,直到r指针的生命周期结束才会释放。

2022-11-06 10:27:51 1073

原创 对于volatile的看法

volatile原意是易变的,编译器对volatile修饰的变量,当要读取这个变量时,任何情况下都会从内存中读取,而不会从寄存器缓存中读取。编译器不会对volatile修饰的变量进行任何优化。

2022-11-03 17:58:25 412

原创 记录一些C++用法

在类中定义,让这个别名归属于此类的范畴中。

2022-11-03 17:33:12 327

原创 QTreeWidget

获取当前拖动到的目的条目(本意是获取鼠标位置所在的条目),即下图中的中间条目(即灰色显示的条目,被移动的“滤镜5”条目所遮挡的那个条目)OnItem、AboveItem、BelowItem分别表示,拖动时,拖动对象在目标条目之上、上方、下方。拖拽treewidget上的项目,切换条目的上下关系,在。

2022-10-13 15:01:21 183

原创 SmartGit连续试用的方法

'firstUsedTime’一行,重新打开即可继续试用。

2022-09-29 11:21:15 1884

原创 QML实现模板方法模式

javascript设计模式 之 8 模板方法模式总结来说就是,父类抽象出整个流程,固定了流程的走向,比如调用 A B C,按这个流程来,并可以默认实现这三个接口,而子类则可以选择实现其中的接口,从而在流程中根据子类实际情况,改变运行路径。

2022-09-01 19:40:18 400

原创 C++函数中返回智能指针的裸指针问题

这里会得到一个临时智能指针变量,它生成临时变量时,计数器加1,函数返回后,这个临时变量会被销毁,此处计数器会减1,那么智能指针所指的内存会被释放,但是这里的释放不一定内存就没了,也不会马上就会被其他程序占用,所有此时这个get返回的地址就是一个野指针了。问题:如果使用智能指针的.get方法,获取一个裸指针返回,那么。2、或者使用std::move的方式移走,让指向的内存不被析构。作为一项案例分析下,C++函数中返回智能指针的裸指针问题。不要在函数中返回智能指针的裸指针出去!...

2022-09-01 16:10:41 1091

原创 QML相关bug记录

这个问题的关键就是,第一输入5后,rootItem.value的值从其他值被改为2.0,再次输入20后,rootItem.value的值还是被改为2.0,这等于没有变化。这里有一个操作就是要判断from和to的范围,让输入的数值在这个范围内显示,当前默认最大值为2.0。那么这里有一个问题就是,当第一次设置超过2.0的值后,再次再设置超2.0的值后,属性绑定时,被绑定的属性的更新时机是在源属性有变化的时候,执行更新的。的输入值,改成对应的value,即从text到value的转化。...

2022-08-25 17:34:08 303

原创 C++传数据给Qml

的话,QVariant里可以放任何你想要的数据结构,一般都是自定义的居多。如果不是自定义的数据,可以直接使用QT的定义类型。那么在QML中,QMAP被当做了一个JavaScript的字典对待。这个信号,并传入自定义的数据结构。如果想给QML传入键值对,可以使用QMap类型,依然的可以使用。以上两种类型,都可以传QList,比如。C++通过发送信号,附带参数给QML。C++类通过返回类型给QML。QVariantList是。上述是qml的槽函数,连接了。,给它传入自定义的数据结构。..............

2022-07-27 15:51:57 2283 1

原创 QT学习:使用JSON/XML等非ts文件实现多语言国际化

主要的方法也比较简单:下面说下的实现主要是将JSON文件中的key-value,解析后存放在map表中,供后面的使用重载translate按照的原型,重载一个即可。主要是通过传入的,在前面的map表中找到对应的value,即翻译字符串,返回即可。注册实例注册实例,一定要在主线程,另一个是要在使用之前注册。运行结果中文JSON文件:完整实现可以微信搜索公众号:“上官宏竹”,关注并回复:“qt_language”,...

2022-06-24 12:44:07 583

原创 Adb常用命令列表

adb常用命令

2022-06-08 20:11:54 539

原创 Mac平台的qtcreator配置clang format保存时自动格式化

点击“关于插件”,在打开的插件框中搜索“Beautifier”,点击勾选,重启QtCreator

2022-06-08 18:26:05 577

原创 Android开发:adb调试显示adb.e unknown command device解决方法

adb连接手机调试显示。解决方法步骤如下:

2022-06-01 16:33:33 18157 1

原创 QT学习:QDropEvent拖拽事件

使用QT实现一个如下的拖拽、拖放动作,只需要三步。主要是使用dropEvent和dragEnterEvent事件处理即可以。在UI中画好布局,然后全部代码如下所示:

2022-06-01 14:19:18 4336 1

原创 MAC下配置QT环境变量(VSCODE)

配置过程MAC下配置QT环境变量,主要配置如下:touch ~/.bash_profilevim ~/.bash_profile~/.bash_profile填写如下内容即可:export QTDIR=/XXX/Qt5.12.11/5.12.11/clang_64export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/libexport PATH=$PATH:$QTDIR/bin注意:如果使用的oh my zsh的shell按照以上的配置在关掉ter

2022-05-30 17:47:56 2215

原创 QML定制TabBar

定制一个垂直的TabBar。QT默认的TabBar都是水平的,且定制其Tab项的背景及字体等颜色都比较麻烦。我们今天来定制一个如下效果的垂直`TabBar`

2022-05-26 19:07:59 2670 1

原创 Qml控件:ComboBox

Qml控件:定制ComboBox

2022-05-26 19:00:43 5813

原创 自定义Qml控件:ImageButton

自定义Qml控件:ImageButton效果实现思路效果我们来定义一个ImageButton控件,即Button上增加显示一个Image图片,既有Button的点击事件,也同时增加三种状态:正常状态、悬停状态、按压状态。

2022-05-26 18:51:09 906

原创 Qml类型:State 状态

Qml类型:State 状态1、定义一个状态2、状态名称3、绑定目标4、触发状态改变我们来写一个状态转换器。

2022-05-26 18:47:36 1347

原创 Qml与C++交互4:C++信号与Qml的槽函数的连接

Qml与C++交互4:C++信号与Qml的槽函数的连接使用场景整体思路1、建立C++信号2、C++实例注册到qml3、qml中建立槽函数运行结果使用属性使用场景比如在C++中更改某些数据,实时更新到UI界面中。整体思路C++中建立一个信号并发送,在Qml中使用Connections建立一个对应的响应槽函数,当C++发送信号时,触发Qml对应的槽函数。1、建立C++信号首先我们声明一个信号如下,然后在点击的槽函数中将信号发出去。{signals: void myClassInfoSig

2022-05-26 18:45:50 3774 1

原创 Qml与C++交互3:Qml的信号与C++的槽函数连接

Qml与C++交互3:Qml的信号与C++的槽函数连接1、C++槽函数实现2、Qml控件增加`objectName`属性3、C++找到Qml控件实例4、连接信号和槽5、自定义带参信号Qml自定义信号C++槽函数定义信号和槽的连接运行结果通过将qml中的信号连接到C++对象的槽函数中,完成某些事件的相应。总体思路:在C++类中增加一个槽函数,然后通过引擎的findChild根据名称查找到对应的qml控件对象指针,然后将qml控件的信号与C++的槽函数连接起来。1、C++槽函数实现class MyCla

2022-05-26 18:44:46 2555 1

原创 Qml与C++交互2:Qml调用C++的接口

Qml与C++交互2:Qml调用C++的接口1、定义C++类对C++类的要求C++类代码实现2、注册C++类注册实现代码通过qml引擎的属性注册C++类3、Qml调用4、运行总体思路:在C++ Qt中增加一个类,并在qml引擎加载前实例化。然后通过Qt提供的接口qmlRegisterSingletonInstance 将实例化好的C++对象注册到qml中,然后在qml中使用注册好的名称来调用C++类对象接口。具体步骤如下:1、定义C++类对C++类的要求即C++类及其成员函数需要满足如下需求后才能

2022-05-26 18:43:23 1131

原创 Qml与C++交互1:C++调用Qml的接口

Qml与C++交互1:C++调用Qml的接口1、QML接口2、C++调用3、代码4、运行结果总体思路:qml中添加一个js函数,C++ Qt中可以使用QMetaObject::invokeMethod 来调用Js函数。1、QML接口给控件定义一个objectName实现一个js函数Text { objectName: "textLabel"; // 控件定义一个objectName text: "Hello World"; font.pixelSize: 26; Layout.lef

2022-05-26 18:42:03 1018

C语言调用mysql快速教程(精华篇)

C语言调用mysql快速教程 如何使用C调用mysql

2013-10-30

C,C++经典问题,及面试笔试题+

C,C++经典问题,及各大公司的面试笔试题

2013-10-30

Visual Uint 3.0软件测试工具

Visual Uint 3.0软件测试工具非常好用的工具 可用自动生成测试用例 适用于VC++

2013-10-30

仿QQ登陆聊天界面源码C++

仿QQ登陆聊天界面源码C++ 有聊天功能 留言功能 登陆功能 用户注册功能 后台服务器 在线人数等功能

2013-10-30

多点温度采集原理图与C语言程序

c语言 多点温度采集原理图与C语言程序

2012-05-07

超全——含答案~~~单片机原理及应用期末考试题试卷大全

超全——含答案~~~单片机原理及应用期末考试题试卷大全

2011-01-02

Flex从入门到实践_完全学习教程

Flex从入门到实践_完全学习教程 非常详细的语音视频讲解,读者可以通过视频直观地进行各种Flex实战入门操作,以更快地掌握Flex,希望给学习Flex的朋友带来帮助! 教程·····

2010-07-15

空空如也

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

TA关注的人

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