
c++
初夏微凉夜
这个作者很懒,什么都没留下…
展开
-
qt中文乱码原因分析及解决方案
首先说明几个基础概念UTF-8 BOM和UTF-8。BOM在文件头位置占三个字节,用来标识UTF-8编码,软件通过BOM来识别这个文件是否是UTF-8编码。 源码字符集。源码文件使用何种编码格式保存的。 执行字符集。可执行程序内保存的是何种编码(程序执行时内存中字符串编码)。 QString::fromxxx()函数。代表将字符串以对应格式去解析成执行字符集,qt程序运行的时候字符串编码在QString中实际都是以unicode编码存储的。fromLocal8Bit()代表从本地字符集(系统设..原创 2020-08-04 00:42:27 · 4056 阅读 · 0 评论 -
qt事件循环阻塞机制分析
关于事件循环所有对象的exec()方法都是开启事件循环,QApplicaion::exec()为主事件循环。程序在exec()里面无限循环,能让跟在exec()后面的代码得不到运行机会,直至程序从exec()跳出 事件循环能接收事件并处理。待处理事件被放在事件循环队列里顺序处理 事件循环的本质就是以队列的方式分配线程时间片,程序所有的代码都活动在事件循环里 事件循环是嵌套的,子层的事件...原创 2020-05-04 04:11:15 · 5500 阅读 · 2 评论 -
qt信号槽跨线程使用时候的坑
信号槽connect的时候扩展有5种,在跨线程使用的时候选择不同的参数会有不同的效果,使用不当会造成线程同步甚至崩溃的问题。5种参数的意义不再累述,可以参考信号槽的多线程安全性讨论 第一个坑 跨线程时connect使用Direct Connection (直接连接) 跨线程触发槽的时候,因为信号和槽不在一个线程内需要考虑同步问题(参考 信号槽的多线程安全性讨论),比较简单的方式是槽函...原创 2020-03-08 22:48:17 · 6415 阅读 · 0 评论 -
信号槽的多线程安全性讨论
讲正题之前首先需要了解几个基础知识点: 信号槽的连接方式 connect()函数的参数如下:QMetaObject::Connection QObject::connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::Connecti...原创 2020-03-07 01:15:46 · 2925 阅读 · 0 评论 -
何为函数对象
函数对象就是一个重载了 () 运算符的类的对象,它可以像一个函数一样使用。原创 2020-01-30 22:01:05 · 199 阅读 · 0 评论 -
c++ 智能指针关键原理
言简意赅,智能指针详细原理不做介绍,只记录关键点。1,STL的std::auto_ptr实际应用基本无意义。因为使用 std::auto_ptr 时,绝对不能使用“operator=”操作符,这一操作会夺取原对象的所有权,会造成原对象悬空。void TestAutoPtr2(){ std::auto_ptr<Simple> my_memory(new Simple(1...原创 2020-01-30 21:55:42 · 131 阅读 · 0 评论 -
哈希表空间换时间原理
哈希表原理不再冗述,以下只记录关键原理。 哈希表的长度一般是定长的,在存储数据之前我们应该知道我们存储的数据规模是多大,应该尽可能地避免频繁地让哈希表扩容。但是如果设计的太大,那么就会浪费空间,因为我们跟不用不到那么大的空间来存储我们当前的数据规模;如果设计的太小,那么就会很容易发生哈希冲突,体现不出哈希表的效率。所以,我们设计的哈希表的大小,必须要做到尽可能地减小哈希冲突,并且也要...原创 2020-01-30 21:40:46 · 1214 阅读 · 0 评论 -
qtcreator多线程编译参数和release调试参数
构建-make参数开启八核编译:MAKE="mingw32-make -j8"qmake额外参数开启release调试:QMAKE_CXXFLAGS_RELEASE=$$replace(QMAKE_CXXFLAGS_RELEASE,'-O2','-O0') QMAKE_CXXFLAGS_RELEASE+=-g QMAKE_CFLAGS_RELEASE+=-g QMAKE_LFLAGS_REL...原创 2020-01-09 09:42:09 · 1774 阅读 · 0 评论 -
QList,QLinkedLis,QVector 内存结构
QList是最常用的容器类,他存储给定类型的数据类型T的一列值。他所维护的是一个一指针数组,该数组存储的指针指向存储列表项的值; QVector这个方式是在相邻的内存位置上保存数据的,也就是以数组的方式进行存储的,所以对起进行插入的操作的时候是一项很耗时间的,因为要有大量的数据进行移位; QLinkedLis内存为链表存储,真正意义上的链表;故而,在使用时候:1、大多数情况下可以用QLi...原创 2019-09-23 16:30:12 · 925 阅读 · 0 评论 -
通用浏览器插件技术概况与分析
目录主要的浏览器插件技术其它类浏览器插件技术http通信websocket通信Firebreath相关介绍浏览器控件发展趋势 浏览器插件是应用范围比较广的技术,因为一旦涉及到b/s模式开发,总会出现web端解决不了的情况,比如操纵硬件或本地文件等。即使html5的出现增强了web端的功能,但是就目前技术和发展趋势来看,浏览器插件技术无法被替代。然而在浏览器插件技术上...原创 2019-01-19 19:12:17 · 4108 阅读 · 2 评论 -
c++ 字符串中截取json的方法
最近项目中需要对一个流进行处理,其中需要一个提取json串的功能,没有找到相关开源的方法,于是手写了一个。因为json串开始结束是以 {} 作为分割的,但是json里面有嵌套包含 {} 的情况。如果能保证截取的字符串里面的 { 和 } 的数量是相同的就可以认为是json格式。具体思路就是从流中截取第1个 { 和第1个 } 中间的字符串 ,如果字符串里面 { 和 } 数量相等,就认为截取成功;如...原创 2018-08-21 11:14:26 · 1330 阅读 · 0 评论 -
类的静态成员函数调用类非静态成员的方法
在类中使用静态成员函数是一种破坏封装的行为,因为静态成员函数只能调用类的静态成员。但是在有些情况下只能使用静态成员函数,比如类内绑定自身成员函数作为回调函数,这种情况在开启多线程时很常见,如果不想将回调定义为全局那只能定义为类静态了,为了避免过度破坏封装类中应当尽量不要让类静态成原函数调用类成员。这种情况下可以用一种比较取巧的方法。因为类的静态成员和普通成员其实就一种区别,那就是静态成员...原创 2018-08-20 16:48:51 · 7421 阅读 · 0 评论 -
开源网络库boost.asio,libevent,mongoose学习记录以及多线程模式的实现
目录IO操作: IO多路复用(select,poll,epoll)select:poll:epoll:异步IO(iocp,epoll)LibeventBoost.asioMongoose总结: 首先说明一下几个基础概念: IO操作: IO操作包括两个部分: 等待数据准备好:对于一个套接口上的操作,这一步骤关系...原创 2018-08-17 21:15:17 · 6468 阅读 · 5 评论 -
使用zlib开源库解压时内存崩溃问题解决
最近一个项目中用到了解压缩,打算使用zlib开源库封装quazip在qt中开发,但是在解压缩过程中遇到了内存崩溃现象,错误指向了inflate_fast里面的汇编模块。最后经过分析发现是编译zlibwapi.dll的时候使用汇编模块造成的bug。解决方法用c编译方式取代汇编方式,在zlib源码的zlibvc工程属性-预处理器定义里面去掉 ASMINF 定义,这样就可以屏蔽掉汇编模块了。但是原创 2018-01-04 20:58:13 · 3419 阅读 · 6 评论 -
qwebsocket使用wss通信时的应注意的问题
qt里面的qwebsocket从5.10版本以后支持wss,但是需要先做ssl设置,官方文档上并没有说明这一点,本人刚开始使用的时候绕了很多弯路。现在将设置方法记录一下,希望可以帮助到大家。wss连接大概原理就是在ws连接之前使用ssl套接字先建立一次安全通道,然后在使用ws连接。所以我们在使用qwebsocket之前需要先进行ssl认证。首先去官方网站http://slproweb.com/原创 2018-01-11 18:15:06 · 6731 阅读 · 2 评论 -
ice使用简单式例 c++
ICE提供一些扩展组件,实现网络通讯的负载均衡(ICEGrid),通讯节点统一管理(ICEBOX),程序自动更新(ICEPatch)等,方便应用扩展。 在实现服务端或者客户端的时候通常都要写一些“公式化”的代码,负责Ice通信器初始化、异常捕获,以及应用终止后的销毁。如下: 1int status=0; 2 3 Ice::Communicat原创 2017-02-13 14:21:54 · 1933 阅读 · 0 评论