- 博客(25)
- 资源 (24)
- 收藏
- 关注
原创 win32应用程序内存不足
当在windows环境运行32位应用程序时,由于32位的限制最大分配的内存只有2G。要想使用更大的内存正常情况下编译为64位就可以了。但是如果程序依赖的库比较多,其他库也需要编译成64位,这样做起来比较麻烦。下面介绍一个更简单的做法,还是32位程序,只需要修改工程属性重新编译一下就可以了。visual studio工程属性设置:右键工程,属性链接器系统启用大地址,选择“是”这样就可以了,你可以试试。...
2021-01-14 07:40:01 1056
原创 CentOS6 yum The requested URL returned error: 404 Not Found
CentOS6不再维护了,目前机器需要更换yum源,地址:https://vault.centos.org/CentOS 6 is now End of Life and there are no more updatesRed Hat have pulled the plug on RHEL 6.x as of Nov 30th 2020 and as a result CentOS 6 is now a dead version. The online yum repos for CentOS 6
2021-01-13 14:31:02 565
原创 jemalloc C++实践
jemalloc是一种通用的malloc(3)实现,优点是避免内存碎片和可伸缩并发支持。下载源码wget https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2解压tar -jxvf jemalloc-5.2.1编译安装cd jemalloc-5.2.1./configuremakemake install我的是Centos安装后头文件在/usr/local/inclu
2021-01-13 14:30:06 2205 1
原创 golang vscode launch.json配置
每次调试运行都要先打开main.go然后在菜单里点击Run->Start Debugging或者F5比较麻烦,主要是每次都要定位了main.go文件,这样当我编辑完其他文件后,都要切换一下才能运行。下面增加一下Launch.json配置就可以直接点击左侧的debug按钮运行了,在Launch菜单下的Add Configuration,内容如下:{ // Use IntelliSense to learn about possible attributes. // Hover to
2021-01-13 14:29:10 11476 1
原创 Qt 正确的显示窗口
显示窗口看起来很简单,但是有一些细节要注意的。通常有下面几种情况需要展示一个窗口:第一次创建后展示窗口最小化窗口不在最前面窗口销毁后再次创建(同第1种)注意: 这里说的不是通过任务栏来激活窗口,而是通过用户设计的按钮或者菜单来打开窗口通常的做法如下:widget->show();widget->raise();这里有两个问题:窗口最小化后出不来窗口从非激活状态显示出来后点击主界面,主界面还是被遮挡了,只有在子窗口上点击一下激活子窗口再去主窗口上点击才有效下面代码
2021-01-13 14:24:25 1309 1
原创 malloc_trim和SetProcessWorkingSetSize两个神奇的内存相关函数
它们两个其实没有什么关系,相似之处是调用这两个函数后内存会有明显的下降,但是原理完全不同。malloc_trimlinux平台的函数,官方的解释是:从堆释放可用内存。在程序中堆上new或者malloc的内存我们都会delete和free掉,由于linux的机制它们并没有立即将释放的内存归还给操作系统,这个也是正常的不用担心,因为linux会充分利用内存提高系统的性能。正常情况下我们也不会调用这个函数,只要正常调用了delete和free就可以了。但是如果你内存不够,或者某个操作占用了太高的内存,之后又
2021-01-12 07:56:18 3079
原创 QWidget QLabel没有响应keyEvent键盘事件
在Qt中我们经常通过重写下面两种虚函数来实现按键事件virtual void keyPressEvent(QKeyEvent *event);bool eventFilter(QObject* watched, QEvent* event);但是有时候会遇到无法触发的情况(特别是QWidget,QLabel),这个时候我们会考虑是不是被父窗口给截获了没有传递给子窗口。如果依旧没有解决问题,那可能是这个widget没有焦点的缘故,通常可以通过鼠标点击和tab键可以获取焦点,但是像QWidget、QL
2021-01-12 07:55:18 1881
原创 golang 控制goroutine调度顺序
使用go关键字就可以很容易的启动一个goroutine,启动后他们的执行顺序是不能保证的。如果有多个goroutine,怎样按照我想要的顺序来执行呢?如:a1在b1和c1后面执行(b1和c1都执行完a1才能执行)d1在a1后面执行(d1执行完才能执行a1)e1在b1或者c1后面执行(b1或者c1有一个执行完就可以执行e1)下面代码演示了怎样解决上面问题:event/event.gopackage eventimport ( "reflect" "sync" "sync/atomi
2021-01-12 07:54:03 962
原创 多线程锁key处理
目的是要保证多个线程处理同一个key的消息时是线程安全的,同时是顺序的。收到网络过来的消息,将消息缓存到total msg cache里解析业务消息找到每条数据的key(可能一条或多条)存储在set中将所有key进行hash,对最大线程数进行取余,获取所有线程索引std::set indexList如果消息没有index即没有key,就轮询分发给otherThread处理有index的消息,根据index分发给线程,如果一个消息有多个index,对应的一个消息会分发给多个线程(keyThread
2021-01-12 07:52:29 392 1
原创 log4cxx OutputDebugString DebugView dbgview
log4cxx常用appender有ConsoleAppender输出到控制台,RollingFileAppender输出到文件。在GUI程序中使用log4cxx时,要想能实时看到输出日志一般用windows函数OutputDebugString,log4cxx console appender是显示不出来的。所以如果log4cxx的日志能向OutputDebugString一样输出就好了,没想到还真有这样一个appender,如下配置就能实现了,这样就可以用vs输出窗口或者DebugView工具实时看
2021-01-12 07:51:10 247
原创 sqlite3 安装、开发
SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world. SQLite is built into all mobile phones and most computers and comes bu
2021-01-12 07:50:22 323
原创 qt.network.ssl: QSslSocket Qt支持SSL https
Qt使用QNetworkAccessManager类时默认是不支持https协议的,需要增加openssl动态库。我发现新版本的Qt和老版本的Qt所需要的openssl库的名字竟然不一样。老的是:libeay32.dll、ssleay32.dll新的是:libcrypto-1_1.dll、libssl-1_1.dll具体的文件可以在QtCreator包里面去找。...
2021-01-12 07:48:54 364
原创 QTableWidget整行高亮去虚线,样式定制
很常见的一种需求,但是很可惜Qt没有一种比较简单的实现方式。在网上找了很多资料也没有找到,实现方法比较复杂,但是经过我的实验,下面这种方法是可行的,而且有很多意想不到的好处。定义接口类存储当前hovered行,split行是实现其他需求的可以不考虑 class IView { public: virtual void setHoveredRow(int row) { row_ = row; } virtual void setSplitRow(int row) { splitRow_ =
2021-01-12 07:47:44 1444
原创 golang接口型函数作用
在我们使用golang写http服务的时候通常会使用http.Handle来注册pattern对应的Handler,其实这里就使用到了接口型函数,源码定义如下:type Handler interface { ServeHTTP(ResponseWriter, *Request)}type HandlerFunc func(ResponseWriter, *Request)func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request)
2021-01-12 07:47:04 459 1
原创 一个常用的shell启动程序的脚本
一个常用的shell启动程序的脚本,脚本、可执行程序、lib库目录在同级目录即可,包括启动、停止和查看进程运行状态。脚本名:svr.sh应用程序名:gonetdisk启动:./svr gonetdisk start停止:./svr gonetdisk stop状态: ./svr gonetdisk status#!/bin/shset -xulimit -c unlimitedSOURCE=`pwd`function start_server(){ SERVER_NAME=$
2021-01-12 07:45:23 1256
原创 gin多模板、模板嵌套使用方法
在做一个web应用的时候,通常多个页面会共用同一个模板,只是每个页面的内容不同。如网页的导航栏、菜单栏、footer是共用的。我们写代码的时候也只需要写一个主模板页面frame.html,内容空出来给具体的页面来实现,如:主页index.html,文章页面post.html,错误页面error.html等等,在渲染页面的时候只需要渲染对应的具体页面就可以了,隐藏了主模板。路由代码演示如下:app.GET("/home", func(c *gin.Context) { //.... c.
2021-01-07 09:53:55 3021 1
原创 PC微信本地图片格式转化
PC端微信收到的图片存储在本地,我们可以打开微信的设置->通用设置->文件管理->打开文件夹,在FileStorage/Image日期目录下找到图片文件,但是它经过了简单的加密并且后缀为.dat。通过下面这个算法可以将dat文件还原成原始图片,目前支持jpg,gif,png三种格式,其他格式应该也同理。先直接上代码,golang代码如下:const ( jpg0 = 0xFF jpg1 = 0xD8 gif0 = 0x47 gif1 = 0x49 png0 = 0x89
2021-01-07 09:49:33 2825
原创 C++11 实现defer
defer函数功能还是蛮常用的,它是在出当前作用域的时候执行,用来回收资源非常合适,可惜C++里面没有,以前实现起来都比较别扭现在用C++11实现后看起来简单多了。此defer内部lambda表达式捕获的是引用;同一个作用域内先定义的defer后执行;使用define以及x##y连接符的作用是,每次定义的局部变量名都是唯一的,使用起来非常方便,否则你可能需要像下面这种写法,每次还要考虑局部变量名不能重名,可能是如下写法: auto _defer_ = defer_func([] {
2021-01-07 09:45:18 727
原创 设置bing桌面壁纸
golang语言编写,设置windows桌面壁纸,图片来自于必应网站(cn.bing.com)github源码地址:https://github.com/tujiaw/gowallpaper有兴趣的Star一下吧编译好的程序:https://pan.baidu.com/s/1l5OW9GeuUF0r5TFaBWkWZg(提取码:pcqh)直接双击运行,显示如下:设置微软必应的壁纸,用法如下:day - 每天更新壁纸now - 设置当天壁纸prev - 设置前一天壁纸
2021-01-07 09:37:20 1411 1
原创 Qt写的截图工具
Qt写的截图工具,没时间维护开源了,有兴趣的Star一下吧,有时间再写代码相关的介绍吧!源码:https://github.com/tujiaw/ntscreenshot已编译好的绿色包下载ntscreenshotwindows截图工具功能列表基本的截图功能全局快捷键设置开机自启动移动鼠标自动感知选区放大器,放大当前鼠标所在像素点周围区域显示选区大小,鼠标光标坐标,光标所在位置像素的颜色c键复制当前颜色移动鼠标选择选区方向键进行像素级移动保存截图到剪切板保存截图到文件目录
2021-01-06 14:45:33 701 5
原创 CentOS7 U盘安装 No Caching mode page found
[sda] No Caching mode page found[sda] Assuming drive cache: write throughU盘安装CentOS7的时候出现上述错误的解决方法。此时会卡在这里,不要着急耐心等待,超时会输出错误信息(10分钟左右),等待可以输入命令的时候:ls /dev/sd*输出如下,每个机器的电脑不一样,我们需要找到U盘所在的位置,这个时候最好拍照记下来。/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda
2021-01-06 11:46:28 2978 1
原创 CentOS7 debuginfo-install
CentOS7 debuginfo-install允许debuginfo源vim /etc/yum.repos.d/CentOS-Debuginfo.repo将enabled改为1安装debuginfo-installyum install glibc-debuginfo yum-utils安装调式信息包和依赖debuginfo-install libgcc-4.8.5-44.el7.x86_64 libstdc++-4.8.5-44.el7.x86_64 libuuid-2.23.2-6
2021-01-06 11:45:53 1364
原创 CentOS7 systemctl service
CentOS7创建服务,下面展示了两个简单的例子,这样就可以用systemctl命令启动、停止、重启进程以及查看进程状态。如:systemctl start gonetdisksystemctl stop gonetdisksystemctl status gonetdisk配置简介[Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系。它的主要字段如下。Description:简短描述Documentation:文档地址Require
2021-01-06 11:44:34 205
原创 golang 中介者模式
中介者模式是一种行为设计模式。此模式是创建一个中介对象,以防止对象之间的直接交互,从而避免它们之间的直接依赖关系。一个很好的中介模式的例子是铁路系统平台,两列火车之间是相互独立的,站长充当调停者,使站台仅对其中一列列车可用。列车通过站长交互,站长维持着等候火车的队列,当任何一辆列车离开站台时,通知下一辆列车可以进入了。注意在下面的代码中,站长是如何充当火车和站台之间的中间人。旅客列车(passengerTrain)和货物列表(goodsTrain)实现了列车接口站长(stationManger)实
2021-01-06 11:42:46 140
原创 golang 单例模式
单例模式(Singleton Pattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。要保证线程安全package mainimport ( "fmt" "sync" "time")type Singleton struct {}var singleton *Singletonvar singletonOnce sync.Oncefunc Instance() *Singleton { singletonOnce.Do(fu
2021-01-06 11:41:55 315
xware-desktop_0.13.20141115_amd64.deb
2015-09-19
我的emacs配置
2011-10-30
GDI+ SDK参考(翻译版本)
2011-05-17
wtl81 支持vs2010
2011-03-18
WTL81_9127
2011-02-26
C++设计模式(用C++写的还有简单的介绍)
2011-01-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人