- 博客(35)
- 收藏
- 关注
原创 C++连接activemq遇到的坑
近期和甲方对接,要求使用activemq, 只给了对接的IP、端口、队列、用户名、密码的信息。但是过程还是很曲折的。建议用比较干净的机器搭建, 一些加域的机器最好不要用,如何搭建MQ和如何安装JAVA环境,参考下面的两个连接。1、activmq 使用C++连接有两种方式, 第一种是stomp, 第二种是activemq的开源库。例子的代码都是封装继承了Therad, 需要利用线程运行,如何调用,线程都已经规划好。stomp默认的端口是61613, 开源库是61616. 而甲方提供的说61616,
2023-08-24 10:56:16
314
原创 海康摄像头的一些问题
问题一: 照片或者视频为黑白色解答: 是因为摄像头所在的环境比较暗, 并且在摄像头默认开启了补光或者区分黑天白夜。 去掉设置可以恢复正常;问题二: 视频中的移动会有绿框。解答: 是因为摄像头开启移动侦测, 关闭可解决。...
2021-08-13 11:03:12
1437
原创 GetTickCount 得到时间进行比较计算遇到的异常
代码中经常遇到利用时间进行计算、比较,用于满足业务。之前遇到过计算异常情况, 并且无法解释的通。 后经过数据转换解决。 即计算机或者比较的变量,进行强转,而不是编译器自己进行转换。...
2021-08-13 10:55:09
345
原创 文本存在乱码,按行读取失败的解决方式
现象: 文本中存在乱码, 使用GetLine、fgets 按行获取信息,没有获取完整就异常结束。 用feof测试也是异常结束。解决思路: 使用fread按字节块读取所有的数据, 然后根据 字符 ‘\n’ 进行分割。 可以得到行的信息。注意是字符‘\n’, 不是字符串“\n”...
2021-08-13 10:33:48
325
原创 共享内存的处理
对于共享内存,在业务上可以进行适当的安排,来进行解决,在代码级别一般都用临界区和互斥量对于临界区,它是解决线程间的共享内存的,不能垮进程对于互斥量,可以是线程间的,也可以是进程间的,进程间是利用系统内核对象的,该内核对象是可以有名字,利用该名字可以达到安全的共享内存在线程之间,临界区消耗的时间大概是互斥量的十分之一,所以,在线程中尽量使用临界区临界区的使用先定义临界区变
2015-11-15 21:56:00
457
原创 fwrite和fread
这两个函数是用于对文件的读写操作的size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);当使用的时候,如果不关闭文件,stream直到当前读写的位置,下一次读写的时候就不会从
2015-11-09 00:09:04
301
原创 qt creator 在linux系统加载动态连接库
说明:在windows下的动态链接库的形式是dll文件;linux下的动态链接库对应的是.so; 在linux下的QT creator生成的是lib文件名.so 加载方法1:通过路径加载LIBS += 相对路径/lib文件名.so加载方法2:通过路径, 大小L来确定LIBS += -L相对路径/-l(小L) 文件名用的时候请注意:一个是加lib 和.so的全名字
2015-11-02 20:37:36
814
原创 我对多线程共享内存的处理的看法
像我以前用到共享内存的时候用临界区来对内存进行保护,这种办法我不认为是错误的 ,这样可以很好的保护好内存,但是问题是当被临界区保护的代码执行的时间长,或者处于挂起状态,那么其它线程在用刀该共享内存的时候会处于等待状态,效率会很低。现在我学到一种方法,当然需要和业务联系起来,这里只提供一种思路。一个线程对内存进行删除操作,另一个线程对内存进行管理,就是对内存进行修改;利用内存结构体的项,个人建议
2015-10-22 20:59:23
1699
原创 服务级程序
今天很崩漏,因为经验的问题,导致程序效率的低下,我做的是服务总线,当我接收到底层的回调数据后立即对数据进行其它位置的保存,方便底层数据的释放。这样是没有错的,错就错在每次的保存数据我都进行了new,如果用完就delete,在界面程序中是正确的,但服务级程序是长年累月运行,如果一直new,delete在window下回出现不知所谓的错误,所以解决的方法就是和底层商量好数据的大小,用数组来做,这样就不
2015-10-14 22:58:16
297
原创 stl set
标准库提供了两种关联容器,集合set和映射map,在集合中元素就是“键”, 在映射中“键-值”;这两者都必须保证了键的唯一。当然stl也提供了多重集和多重映射容器。bool empty() //集合是否为空int size() //集合众元素的个数//在集合众查找键key,找到就返回迭代器,不在返回enditerator find(const
2015-10-06 20:39:30
298
原创 stl 中的栈
栈:后进先出在stl标准C++库中是含有栈的结构的,因此不用再写一份栈的数据结构#include //栈的头文件bool empty() //栈是否为空void pop() //从栈顶删除元素(栈不能为空)void push() //在栈顶插入一个新的元素int size() //栈的数据
2015-10-05 14:28:54
378
原创 迭代器
迭代器在容器中类似C++中的指针,用iterator来进行声明。如果是常量迭代器就用const_iterator来进行声明,常量迭代器不能用insert和erase
2015-10-05 14:04:54
262
原创 模板list
list::push_back() //在后面插入元素list::push_front() //在前面插入元素list::front() //访问第一个元素list::back() //访问最后一个元素list::pop_front() //删除第一个元素list::pop_back() //删除最后一个元素list:
2015-10-04 17:55:51
269
原创 vector::push_back
向量容器插入元素用push_back()。但这样会造成一个问题,当每次插入元素的时候都会判断向量的空间是否足够,如果不够,内部会调用reserve来分配空间,这样就会造成频繁的申请空间,造成效率的浪费。因此可以在初始化时分配一块空间,或者在不够的时候分一块稍微大的空间
2015-10-04 16:14:47
377
原创 我不经常用的
vector::back() //返回最后一个元素,vector::pop_back() //删除最后一个元素,前提为向量不为空vector::empty()
2015-10-04 14:53:32
256
原创 vector的删除
今天写vector删除的时候犹豫了一下。vector删除的时候都是用erase(where);这个函数调用的时候,如果删除成功, iterator会自动移动到下一个。所以在循环操作的时候注意一下就行了。例子:vector l_vectorInt;for (int ii = 0; ii {l_vectorInt.insert(ii);}vector::iterat
2015-09-28 21:43:10
452
原创 string类字符串中的两个查找字符函数
string::find_first_of(char c, int iStart = 0)该函数表示从iStart的位置开始查找字符c, 如果找到返回第一次找到的位置,注意:这里的位置都是索引,从0开始;如果没有找到则返回-1;string::find_last_of(char c);该函数表示最后一次找字符的位置,如果没有找到则返回-1; 因为是从最后开始找,所以没有必要起始
2015-09-24 23:44:09
606
原创 每次发送验证socket是否可写
曾经年轻的我,认为利用udp来发送文件,自己做判断,自己做握手;结果出现的问题就是在网络状态良好的情况下可以达到7M多,但是网络一不好,就基本就玩了发送不成功。最后还是转到tcp,让tcp自己处理握手,最起码这样是稳定的。那么就要解决发送的速度问题。都认为udp快,那是因为udp不需要管数据的正确性,只要要求数据的正确性,就得做握手,还不如直接用tcp的。正题:我们利用socket发送数据时,
2015-09-13 14:36:41
1367
原创 QT window 和linux下的双编译
qt具有良好的界面风格,并且最重要的它可以跨平台。但是当我们需要用到系统函数的时候,就不得不考虑双编译的问题,怎么才可以在编译的时候从代码上区分是windows还是linux,linux是用的unix的内核,是一样的。上代码在每次用到系统函数时#if define (Q_OS_WIN32) //表示属于windows的调用windows的系统函数#else
2015-09-13 11:09:19
1971
原创 GDI+文本居中
FontFamily l_formatFont(L"宋体"); //字体格式Gdiplus::Font l_font(&l_formatFont, 18, FontStyleRegular, UnitPixel);//文字居中StringFormat l_formatRect; l_formatRect.SetAlignment(StringAlignme
2015-08-30 15:51:25
1707
原创 MFC 绘制半透明图片
用MFC绘制半透明图片其实根本没有必要,因为有美工;哈哈,当然了我们自己练手的时候没有美工,自己也不会ps,只能用代码了void 类名::DrawClearImage(Graphics *pGraphics){//注意0.5表示所需要的透明度,在0~1之间,越小,越透明ColorMatrix colorMatrix = {1.0f, 0.0f, 0.0f, 0.0f, 0.0
2015-08-26 20:45:17
715
原创 MFC 树控件我喜欢的两个函数
CTreeCtrl::GetItemData( HTREEITEM hItem);CTreeCtrl::SetItemData(HTREEITEM hItem, DWORD dwData);我们在用的时候,往往树节点的名字是不能当作唯一性来操作的;并且我们也往往会将树的每个节点和其它信息进行关联,这个时候我们就会用到树节点的data这个属性;这个data的大小是4个字节,也就意味着要用
2015-08-23 18:35:22
639
原创 MFC 树控件含有checkbox的鼠标点击处理
首先要在树控件属性上加上checkbox;或者用代码;MFC鼠标点击消息 afx_msg void OnNMClickTreeUnitshow(NMHDR *pNMHDR, LRESULT *pResult);ON_NOTIFY(NM_CLICK, IDC_TREE_UNITSHOW, OnNMClickTreeUnitshow) 代码控制void CSelectUnit
2015-08-23 18:05:39
2656
原创 调试神器
今天说一个函数,我也是刚刚接触OutputDebugString (),这个函数在很多软件中都会频繁的调用,因为程序长时间的运行是不能看代码的,只能一直在运行,而这个函数是调用的是系统底层的一个变量,不怎么耗费资源,在代码容易崩溃的地方加入这个函数已经输出,可以很到的定位到错误; 当然了还需要一个DebugView的工具;我很可以在电脑是下一个打开看看,会发现很多软件都用OutputDebug
2015-08-19 23:38:08
359
原创 MFC tip信息
//定义Tip信息对象,因为tip信息的情况很多,就直接用成员变量CToolTipCtrl m_ToolTipCtrl;//定义一个tip信息显示控制的变量,因为addtool和delTool会一直发消息int m_iToolNum = 0; // 要设初始值为0//下面是Tip信息初始化代码//允许tip信息的显示EnableToolTips(TRUE)
2015-08-16 13:54:36
616
原创 k8测试的一个问题
测了一天,两万行的代码18个错误都是一样的类型。各种纠结,各种痛苦,一直提示内存可能释放两次,可我代码明明进行了NULL的测试,为什么还会报错。下面我说一下。我错误的情况:类中含有指针,我在析构的时候对指针的判断和释放进行了处理,可就是报错。if (NULL != l_pTest){ delete l_pTest; l_pTest = NULL;}
2015-08-13 23:09:07
1145
原创 回调函数
学习累了,写点东西换换脑子以下都是个人理解,可能和概念冲突;一般人会问什么是回调,我给不了定义,但我知道回调是干什么用的。回调是利用传递进来的函数指针来执行对方的函数,换句话说就是利用对方的函数指针在我函数里去实现对方的函数,当然对方的函数操作还是对方的。是不是很绕,我也感觉很绕。在一个.h .cpp中分别定义和实现回调函数,例如a.h, a.cppstatic int CALLB
2015-08-11 22:54:38
323
原创 MFC 消息截取简单说一下
这里面不聊钩子,就聊两个函数:PreTranslateMessage 和DefWindowProc我曾经遇到过有时候PreTranslateMessage 的函数是进不去的,尤其是release版,现在大家都喜欢用PreTranslateMessage ,但是我的建议是将这个函数换成DefWindowProc;虽然将该函数的参数转为MSG会麻烦一点,但是绝对是可以进去的。所以现在的我都是用
2015-08-10 08:22:05
474
原创 关于动态链接库的接口
以下为个人经验,因为做定制软件比较多,所以总结了一下;1、接口参数不传“结构”,如果参数是结构体或者类,那么当用户需要改结构体名称或类名的时候,那就完; 用buff 和Len来代替参数,这样的好处,不受版本和外部名称的控制;2、结构不能做为接口的参数,那么STL就更不用说了,是坚决不能用的。或许有人说:我用STL的指针不是可以吗? 但是,从工程上讲是坚决不行的,一个的结构
2015-08-09 22:51:10
943
原创 关于界面滚动条的问题
滚动条说白了,弄清楚三个值就够了;page,size, pos; 这三者的关系就决定了滚动条的大小,位置,通过这三个东西就可以任意的控制滚动条了。先说三者的关系 page + pos的最大值 == size; 一般我们将屏幕的大小设置为page而不是1,这样我们比较容易控制,将size设置为画布的大小,这个画布不是你的窗口大小。这样就比较好控制。例如:画布大小为两屏,就设size =
2015-08-09 11:50:09
393
原创 变量的注意事项
以下是自己的经验:全局变量命名:g_变量名; 局部变量命名:l_变量名; 成员变量:m_变量名; 为什么这样做呢?因为现在的代码的量越来越大,如果没有很好的命名规则,导致代码的可读性太差;所以当我按照上述的规则,我就能马上分清是函数变量(不需要特殊前缀),局部变量,成员变量和全局变量大家都知道变量要在循环外定义,减少在开辟空间耗费的时间;但是现在大家都喜欢用STL,如果里面有嵌套,
2015-08-09 10:34:03
461
原创 自绘时如何很好的处理单击和双击消息
一般像我自己做程序的时候会尽量避免单击和双击都处理很多事情;但程序员身不由己,上面有项目经理(最怕遇到想当然的),外面有客户;当他们都要求这么做的时候,我们就真的没办法了;一般的,会用sleep来判断是否是双击,但是单击双击都处理的话,显示是不行的。我们通过TRACE可以知道,双击会进入down,up, Ddown,up这几个消息。因此我的做法是在类中声明一个变量,在down 和Ddown的时
2015-08-08 22:19:44
424
原创 MFC dll文件的简单说明
以下为个人工程经验:因为项目需求,需要用xp 和vs2003开发;但是我们平常演示的时候是用的win7, 为了不在虚拟机下来回捣,就将库变为静态库,同时将测试程序也变成静态的;结果给客户部分成果时,忘了改回来,结果傻眼了;所以为了方便演示,用静态库,他其实是将所有的文件都包含进去了,会变得很大;但是最后的结果就要改回来,千万别忘了
2015-08-08 22:08:58
369
原创 MFC 下的dl文件和外部程序的冲突问题
在MFC下写dll文件会用到CWnd, CDialog等资源,但这些资源和利用该dll文件的程序的资源造成冲突,出现崩溃;其时在写dll文件,尤其是MFC下的dll文件,要标明资源属于内部的,这样内外资源就不会冲突。抱歉了各位看官,我也感觉我废话多,直接上代码在接口的主CPP下添加:HINSTANCE save_hInstance = NULL;
2015-08-08 22:00:21
353
原创 C++ 下的GDI+绘图初始配置
在stdafx.h的文件中导入:#include #pragma comment(lib, "gdiplus.lib")using namespace Gdiplus;在APP的.h文件中 添加 :virtual BOOL ExitInstance();(相当于重写)GdiplusStartupInput m_gdiplusStartupInput;UL
2015-08-08 21:42:03
468
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人