自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (7)
  • 问答 (5)
  • 收藏
  • 关注

原创 vscode 配置多modules的golang项目

这里写自定义目录标题起因解决方案起因尝试用vscode来做golang开发,使用了go mod方式来管理各个包,发现vscode并不好用,F12无法跳转到,提示找不到定义,并且在右下角也会有来自Go扩展的错误提示通知:Error loading workspace: You are working in a nested module. Please open it as a separate workspace folder. Learn more: https://github.com/golan

2021-07-13 14:52:51 6104

原创 cppcheck make参数(踩坑)

这里写自定义目录标题下载安装注意make参数下载https://sourceforge.net/projects/cppcheck/files/安装tar zxf xxx.tar.gzcd xxx注意make参数# DESTDIR 安装到的目的路径# FILESDIR 实际安装路径为`DESTDIR+FILESDIR`,注意这两个路径末尾斜杠都要去掉make -j8 FILESDIR=/usr/share/cppcheck DESTDIR= MATCHCOMPILER=yessudo

2021-06-07 12:09:19 408

原创 记c++坑:7.记一次由智能指针导致的内存泄漏问题解决

目录项目背景问题产生项目背景我们的主要产品是一个针对个人用户的c/s,b/s混合架构的应用,为了对我们产品的一些新功能调试,压力测试,以及对线上服务的监控,我使用c++开发了一个机器人程序。这个程序中90%的设计和代码由我完成,除了其中的一个基于udp通信的库,使用了enet,然而这个库在之前不可追溯的几任维护者手中,将其代码进行了修改,居然在里面掺杂了tcp通信的功能!这完全违背了设计模式的...

2019-11-20 16:56:37 926

原创 linux c++获取进程的实时内存使用和cpu占用

看起来很简单的问题,本来想在网上找一个,找了一圈没有一个简洁合适的,遂自己写一个,部分代码copy自网帖并稍加改造。头文件:#ifndef _UTILITY_RESOURCE_0EFC332C_91AC_4126_9BAB_F32C12AAD376_H__#define _UTILITY_RESOURCE_0EFC332C_91AC_4126_9BAB_F32C12AAD376_H__...

2019-10-08 16:34:25 2749

原创 python 各种遍历方式性能比较

代码:def iterrange1(f, c): while f <= c: yield f f += 1class iterrange2: def __init__(self, f, c): self.f, self.c = f, c def __iter__(self): return self def next(se...

2019-08-28 10:35:14 1913

原创 200行python实现一个迷宫

代码如下:#coding=utf-8import random, sys, timefrom Tkinter import * def timing(out_prefix, func, *args, **kwargs): print("%s:timing start..."%(out_prefix)) t1 = time.time() r = func(*args, **...

2019-03-06 14:55:51 950 2

原创 记C++坑:6.正则标准库regex不同平台行为不一致

代码如下:#include &lt;string&gt;#include &lt;iostream&gt;#include &lt;regex&gt;#define REG "hello(, |)"int main(){ std::string s1 = "#hello, hello#"; std::string s2 = std::regex_replace(s1, st...

2019-01-02 16:11:22 631

原创 c++如何构造一个递增的vector数组

原生数组和vector、array都不支持构造一个递增的数组,比如一个包含0~999的size为1000的数组。传统的方式是:int ids[COUNT] = {};for (int i = 0; i &lt; COUNT; ++i){ ids[i] = i;}或std::vector&lt;int&gt; ids;ids.resize(COUNT);for (i...

2018-09-27 10:43:42 7073 6

原创 记C++坑:5.默认的隐式类型转换

最近排查解决一个项目中的性能问题,发现在一个工作线程中有这么一段代码:uint64_t servive_loops = 0;while(true){ // 业务逻辑代码 if (servive_loops % 1000 == 0) // 标记-1 { RecodeServiceStatistics(m_statistics); } ...

2018-09-20 20:51:38 473

原创 对C++锁的一些思考

C++中的多线程编程是一个相对复杂,坑比较多,并且出现问题较难排查的一个编程领域,也是c++编写大型项目中避不开的部分。加锁的方式有很多,应用场景也各都稍有不同,根据不同维度(或者侧重点,比如是原子化操作还是通知,技术属于乐观锁还是悲观锁,内核级别还是用户级别,linux平台还是win平台)可以分成很多类别,但其作用都是服务于多线程程序的稳定运行,所以一般都统称为“锁”。比如原子类型(使用场景如在...

2018-03-05 16:17:03 3572

原创 记一道关于链表逆序的面试题

上周末参加了一次面试,国内知名互联网企业,面试全程也是相当紧张。    在第二轮当中,面试官让手写一个“最简单的”链表反转函数。    在以前的面试中我也遇到面试官要线程写链表反转,我一般都会写循环迭代的方式,因为这题主要是考察指针使用的灵活程度,代码并不复杂,两个指针一次遍历并反转next指针指向就好了。    并且据我的经验,如果写成递归形式,那么最终的执行过程中不断调用调用有可能

2017-12-28 13:38:11 268

原创 c++11通过变参模板实现特殊的数据结构和算法

C++11中增加了变长模板参数,可以替代c语言中的...参数(比如printf系列函数)。c语言中的...参数使用va_list来解析,在运行时通过对char*指针的强转达到使用参数的目的,所以当传参类型和实际处理...参数的函数代码中要求的单数类型不一致时,会引起编译时期发现不了的问题,严重可能导致程序崩溃。 C++11中变长模板参数的语法就不多说了,最开始使用的时候总会觉得用法...

2017-11-17 16:20:05 599

原创 c++11实现强类型缓存系统

提示:    此博客中代码不一定是最新,最新代码请参考:https://github.com/xj-zhu/ttl_cache开篇:    看到这篇文章,或许你会有以下疑问:    现在有各种开源的内存k-v缓存数据库,为啥要自己搞一个?    几点解释:        1. 这些k-v系统一般都比较重量级,当然相对于关系型数据库可能还好,但是相对于我的这个实现

2017-11-08 19:35:49 1511

原创 C++11必会技能

容器:std::array –定长数组,替代特定场景的std::vector使用std::array<int, 10> arr;长度为10的数组,不可扩容std::foword_list –单向链表,性能比std::list高,但是使用限制多,特定情形可使用std::unorderd_set/multiset/m...

2017-10-31 17:30:34 931 1

原创 C++实现记录类型内存分配方式的包装类,使对象(或原始类型)只能通过new的方式实例化

因为c++new的实现的特殊性(对于非POD类型,new完成之后自动调用对象的构造函数),但是new调用构造并不是在可以重载的new操作符中完成的,这部分的流程通过编程的手段没办法改变(至少以我目前的能力来说),所以想要简单的在new的某个阶段记录新生成的对象来自于new操作是没法做到的。现在提供一种略微复杂一点(其实也很简单)的方法来标记对象生成来自于new还是栈上申请。思路:1,将...

2017-09-15 14:17:43 564

原创 三年经验c++程序员所不应该犯的错误

这里只说c++,并且因为不同的开发者平台不同,方向不同,依赖于编程环境的一些问题暂且不说,只说说所有c++程序员都应该避免的错误。如果你是一个三年经验的c++ coder,不妨对比看一看,如果自己身上出现了这些问题,还真要好好反思反思了。如果你是一个c++ leader,而你手下的三年经验的小伙伴恰好有出现这些错误的,那你应该考虑是不是应该让他领盒饭了,或者委婉点把这篇文章转给他看看吧

2017-07-12 20:47:47 2785

原创 C++通过bind,lambda表达式等实现简单的异步函数调用模型

用C++写代码的时候,有很多的场景需要关注一种情况,就是当需要调用一个可能引起长时间阻塞的函数(例如阻塞式的io操作)。大家遇到这种情况,代码的写法一般是这样的:1.调用需要阻塞以等待操作Func完成的接口 -> 成功 调用 FcncDone这样的调用方式会导致线程阻塞,尤其是在主线程中,应该避免这样的调用方式,以免造成用户体验上的卡顿,转化为如下写法:2.使用异步的方式(创建线程

2017-06-13 15:57:17 3906

原创 shared_ptr,weak_ptr,unique_ptr

1.shared_ptr 互相引用会出现资源不释放的问题,造成内存泄漏。比如这段代码:class C2;class C1 {private: std::shared_ptr _c2; public: void setC2(std::shared_ptr c2) { _c2 = c2; } ~C1() { std::cout << "kill c1\n"; }}

2017-05-12 19:04:22 349

原创 记C++坑:3.结构体和类对齐补齐

背景:项目从旧的编译器(VC6)移植到新编译器(VS2015)。移植过程中有很多的编译错误连接错误都一一解决之后,运行,发现崩溃,错误为声明一个类类型对象变量时候堆栈错误。导致出现内存问题。因为是移植项目,原来的编译器编译的版本跑起来好好的,所以没太怀疑时代码问题,最开始的思考思路一直集中在是不是使用的lib库有问题,检查项目配置,检查各个库的版本,都没有什么发现,后来再来看代码,发现真的

2017-04-13 14:56:41 1244

原创 记C++坑:2.局部变量的申明方式

最近有同事问,没什么他写的下面这段代码会报错:int cls::getmapvalwithlock(int key, std::mutex& lock){ std::unique_lock(lock); return m_map[key];}错误原因是变量lock重定义。然后他将代码改成int cls::getmapvalwithlock(int key, std::mutex&

2017-02-15 11:32:01 869

原创 RAII资源管理一定没问题吗?

#include #include #include class clsinfo{public: clsinfo(int idx) :m_idx_(idx) { std::cout << "begin(" << m_idx_ << ")."<<std::endl; } ~clsinfo() { std::cout << "end(" << m_idx_ << ")."

2017-01-19 15:46:27 387

原创 8大排序

代码:ArrayDefine.h#pragma once#include #define ARRAYLEN 1000000int InitArray(int* arrayname){ FILE* f = fopen("data.dat","rb");//文件中有1000000个整数 int b = fread(arrayname,sizeof(int),AR

2016-12-15 15:48:54 281

原创 记C++坑:1.被自己坑了一次的全局变量使用

最近遇到一个问题,打算写一个小的测试程序来测试一下自己设计的算法方案。当时也没考虑就用了全局变量。当时的代码是这样写的:int intarray[] = {1,10,100,1000};int CreateArray(int* arrayname){ arrayname = new int[4]; memccpy(arrayname,intarray,sizeof

2016-12-15 10:24:31 2504 1

原创 C++代码复用的方法

情景:  对不同的对象,要执行相同的逻辑操作。在C++中有哪些方法实现?解决方法:  1,模板,将不同的对象的类型作为模板参数。//例:int iarray[] = {2,6,4,8,3};std::sort(iarray,iarray+sizeof(iarray)/sizeof(iarray[0]));double farray[] = {2.0,6.0,4.0

2016-12-02 23:06:11 12376 1

原创 基于mfc的输入检查弹出式警告框类

效果图:代码:InputCheckTip.h #pragma once#include "Resource.h"#include "SSWnd.h"// CWndInputCheck 窗口#define TIMER_HIDETIP 1001class CWndInputCheck : public CSSWnd{ DECLARE_DYNAMI

2016-12-02 23:04:57 2198

原创 tcp socket状态

温故而知新11个状态:图是自己画的,这样可以更加加深记忆。如果通信双方几乎同时主动关闭连接,会出现发送FIN后没有先收到对方的ACK而是对方的FIN,这时连接状态会变成CLOSING,同时会发送对应的ACK,收到对方ACK后变成TIME_WAIT,2MSL超时后变成CLOSED状态。copy的一张更全的图,包括各种异常关闭:

2016-11-23 13:06:35 445

原创 返回值的锁

在多线程编程中,时刻需要注意加锁,这也是多线程编程中的一个难点。    但是我们所用到的锁都是“协议锁”,即是一个“君子协定”,所谓“防君子不防小人”。这也是多线程编程中比较让人肾疼的地方。    我觉得用“锁”这个名词对编程中的这种操作现象进行描述其实是不太合适的,反而会引起歧义,把它看成是门口挂的一块“告示牌”会更合适一些---一面写着“有人勿进”,一面写着“空闲可用”。    你

2016-11-10 17:53:03 620

转载 同步异步阻塞非阻塞

作者未知,不过感谢如此精辟的总结:老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~

2016-10-27 10:37:15 245

转载 最简单的文件加解密算法

参考网帖。调用一次为加密,对已经加密的文件再调用一次为解密。#include #include bool EncodeDecodeFile(const char* sfilesrc, const char* sfiledst){ if(NULL == sfilesrc || NULL == sfiledst) { return false; } bool ret =

2016-09-13 11:51:04 1135

原创 vs2008 2010 2013初次尝试配置protobuf

1)首先上网搜索了一下,找到以下地址:https://github.com/google/protobuf但是这么多版本选哪个呢,顿时懵了。需要编译windows 的vs版本,找了一下,好像只有2.6.1目录下有vsprojects,所以就它了。Switch branches/tags ->tags->2.6.1->Clone or download->Download Zip

2016-09-01 10:56:41 2711

原创 如何将程序的执行文件和静态加载动态库放在不同的目录

一般windows程序的exe和dll需要放在同一个目录,静态加载才不会报错,否则需要修改path环境变量,将所有没有和exe放在同一目录的dll的路径加在path环境变量中。有没有一种方法不去手动修改path环境变量并且可以将exe和dll随心所欲的改变路径呢?我没有发现,但是我们可以将修改环境变量这件事情交给我们的程序本身来处理,那么从现象上来看就是我们不需要修改环境变量而可以将dll从e

2016-06-01 17:46:06 4600 2

原创 性能检查

头文件:#pragma once#include #include #include #include #define SSBASETOOLS_API//////////////////////////////////////////////////////////////////////////// 性能测试class SSBASETOOLS_API Performanc

2016-01-22 16:40:47 345

原创 关于c++多态

下面这段代码:#include #include class parent{public: virtual void who() { std::cout<<"I am class Parent"<<std::endl; }};class son : public parent{public: virtual void who(

2016-01-12 09:47:32 269

原创 多线程,锁

现在公司的代码动不动各种崩溃,原因大部分是由不加锁引起的。例如很多的底层数据,全部封装成了AfxGetXXX的形式,对所有的类,模块全部暴露:例如,一个缓存类,DataCache, 其中有个std::map保存数据,那么会有一个全局的AfxGetDataCache()返回这个数据结构,其中居然提供了接口std::map &GetCache()接口,所以导致了多线程中直接操作数据引起崩溃的风

2015-11-24 16:30:41 346

原创 mfc如何快速实现无边框窗口阴影效果

mfc如何快速实现无边框窗口阴影效果mfc窗口当有边框的时候才会有阴影效果,怎么快速实现无边框窗口的阴影效果呢?大部分的方法都是推荐使用分层联动的两个窗口来实现,但是这种处理方式稍显复杂,要处理两个窗口的代码。现在介绍一种简单便捷的方法,其实这种方法也就是直接使用windows自带的阴影效果,所以简化了自己重绘阴影的繁琐问题。首先介绍一下原理,这种无

2015-09-16 15:39:36 12242 7

仿spy++/QQ截图获取鼠标指针所在位置的窗口并突出显示

核心代码为封装的一个类“HightLightMask”,提供高亮显示光标所在处的窗口的接口和获取最终高亮的窗口句柄,能够枚举到最底层次的子窗口,高亮显示加入动画效果,显示更柔和。

2017-08-25

C++重绘button按钮控件,支持设置背景色,边框色,扁平化

C++重绘button按钮控件,支持设置背景色,边框色,扁平化 C++重绘button按钮控件,支持设置背景色,边框色,扁平化

2017-08-04

c++ 带icon的edit重绘输入框,可用于登录界面等接受信息输入的输入控件

c++ 带icon的edit输入框,可用于登录界面等接受信息输入的输入控件 c++ 带icon的edit输入框,可用于登录界面等接受信息输入的输入控件

2017-08-04

C++ png图片控件合集,包含三中效果的图片控件

1.支持显示图片的控件ImageStatic,支持设置背景色和边框色,可响应点击 2.支持loading效果(转圈)控件ImageLoadCtrl,继承自ImageStatic,可设置loading效果颜色,提供加载失败效果 3.支持鼠标移入和移出时动画效果控件ImageAnimateCtrl,继承自ImageLoadCtrl,类似csdn博客首页图片鼠标移入移出效果,移入时图片放大,饱和度提高,有泛光效果

2017-08-04

基于GDI+的图片显示控件,可用于图片展示,验证码显示等,提供loading效果

基于GDI+的图片显示控件,可用于图片展示,验证码显示等,提供loading效果 基于GDI+的图片显示控件,可用于图片展示,验证码显示等,提供loading效果

2017-07-31

windows网络编程.PDF

从下面链接(http://download.csdn.net/download/avalonBBS/444969)下载的原始文档,合并整理成了一个pdf文档.

2016-10-12

D3d学习作品,3d魔方游戏。

Dx3d做的一个魔方小游戏,初步成型,至少能玩起来了,素材除了背景图片是网上找的一张图,其余全部为自己动手制作,包括.x和纹理贴图。这次分享执行文件,看看评价怎么样,可能还有些小问题存在,请各位多多指导,多多批评。

2015-04-22

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

TA关注的人

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