
C++
Butterfly_Dreaming
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Bug定位体会
有的时候,当出现一些自己不认为不可能出现的错误的时候,在反复检查代码的过程中,也没有发现问题,这个时候,就不用太纠结在自己的代码上。要知道,你认为的代码没有问题,那只是你认为,有的时候,一些显而易见的错误,自己检查代码的时候,可能定位一整天也定位不到,但是其实是一个很小的问题。这个时候,就需要实际运行调试,在出现错误的机器上面调试,问题复现的时候,就会很简单的找到错误,比起自己埋头检查代码要好很多。复现问题,打日志调试,调试!!!!不要老是埋在代码找问题,有时候很简单的错误就是找不到,.原创 2020-10-26 16:06:18 · 261 阅读 · 0 评论 -
POCO网络库
最近研究如何将POCO网络库应用在高并发项目中,发现POCO在windows下面使用select模型,不适合做高并发的TCP服务器。当然用作HTTP服务器是可以的,因为HTTP服务器实现是这样的。通过线程池来管理多个HTTP连接,当并发连接超过最大的线程池数量的时候,连接排队等待线程处理中,只要处理速度足够块,高并发请求也可以响应,因为HTTP连接处理完成后,就断开了。但是如果是需要长连接,这种处理过程就无法满足了,而提供的select模型也不能应用,当然在linux下面可以使用epull.原创 2020-10-13 23:28:04 · 1077 阅读 · 0 评论 -
C++继承中析构资源注意点
问题在使用自己实现的线程类的时候,偶尔会出现奔溃virtual ~thread() BOOST_NOEXCEPT {try {ensure_thread_over();}catch (…) {//avoid exception;}}class MyThread : public utils::thread{public:void run() {_run();}std::function<void() > _run;};这里, _run会析构掉,然后 ~thr原创 2020-09-16 11:09:43 · 227 阅读 · 0 评论 -
STL condition_variable一个bug
测试STL的 condition_variable 发现一个BUGVS2019运行如下代码时// condition_variable::wait_for example#include <iostream> // std::cout#include <thread> // std::thread#include <chrono> // std::chrono::seconds#inclu.原创 2020-09-09 21:43:37 · 412 阅读 · 0 评论 -
有关内存分配,赋值的时间测试
有关内存分配,赋值的时间测试#include <iostream>#include <common/utils.h>#include <common/TimeSpan.h>using namespace std;void Test(int mem_size) { cout << "========================" << endl; cout << "Test mem size = "; if (me原创 2020-08-21 00:27:15 · 310 阅读 · 0 评论 -
关于boost log库
最近使用glog遇到一些问题,想着尝试使用boost log,然后开始研究源码,在使用一个库之前,我必须能对源码有掌控,但是研究了几天后发现,实在是太复杂了,代码量很庞大,很多东西都是自己实现,包括ostream 都是自己实现的,让看的人很痛苦,比起 stl 源码,stl源码是很简单易懂的,所以放弃使用,当然boost也有简单的,比如pool, 代码量就很小,也简单,所有针对boost,那些用途广泛,会纳入到标准的,要研究透,然后使用它,比如bind,functional,有些没有必要研究,只是一个日志,原创 2020-08-15 00:22:02 · 318 阅读 · 0 评论 -
Android APP调试备忘
Android APP调试备忘安装签名不一致,提示无法运行,安装不上问题等检查 AndroidMainfest.xm 中 package=“com.example.whsarmclient” 和 build.grade 中 applicationId “com.example.whsarmclient” 是否一致命令行卸载 adb uninstall com.example.whsarmclient 或者 adb uninstall com.example, 保证能卸载干净日志文件不能生成原创 2020-08-13 10:30:42 · 173 阅读 · 0 评论 -
C++流扩展 streambuff-转载
C++流扩展 streambuff结合socket流的扩展参考链接结合socket流的扩展#include <WinSock2.h>///// out//no buffer class SocketOutStreamBuf : public std::streambuf { public: SocketOutStreamBuf(SOC...原创 2019-10-12 10:55:17 · 781 阅读 · 0 评论 -
字符串反转问题
#include /*Funtion: 字符串的反转操作 例如 “I am a student”反转为" student a am I";*/void translate(const char* src, char* des){ int len = strlen(src); char* p = (char*)src + len - 1; int count = 0; whi原创 2014-03-10 00:04:29 · 775 阅读 · 0 评论 -
TEMP
OnOpenNdiskIndex()有ON_COMMAND和ON_MESSAGE进行同一个消息的响应,不知道有什么区别boost::bind函数说明BOOST_FOREACH 和 for_each的区别thread_param_wrapper >* p = (thread_param_wrapper >*)lpParameter;LRESULT CSLabelT原创 2014-04-28 17:35:49 · 806 阅读 · 0 评论 -
do...while(0)的妙用
转自 http://www.cnblogs.com/flying_bat/archive/2008/01/18/1044693.html转载 2014-05-12 21:04:08 · 573 阅读 · 0 评论 -
Ubuntu下搭建FTP服务器
后台一直提示wordperss版本和插件有更新,看着碍眼,决定把它们全都更新。不过更新文件需要服务器提供FTP服务,linode也没有提供到FTP,只能自己装一个了。我装的服务器系统是Ubuntu 12.04 LTS,FTP软件当然是选择大名鼎鼎的vsftpd(very secure FTP daemon), 用系统自带的FTP还好Ubuntu装vsftpd还是很简单,一句命令就行:sud转载 2014-06-24 23:28:39 · 733 阅读 · 0 评论 -
log4cxx类的使用(简单封装)
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息 %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL %r 输出自应用启动到输出该log信息耗费的毫秒数%c 输出所属的类目,通常就是所在类的全名%t 输出产生该日志事件的线程名 %n 输出一个回车换行符,Windows平台为“rn”,Un原创 2014-07-31 12:27:50 · 2976 阅读 · 0 评论 -
CTRLLIST用法
m_ctlList.EnableGroupView(TRUE);LVCOLUMN lv;lv.mask = LVCF_WIDTH | LVCF_TEXT;lv.cx = 300;lv.pszText = L"xxx";m_ctlList.InsertColumn(0, &lv);m_ctlList.InsertColumn(1, &lv);UINT nG原创 2014-08-14 00:29:47 · 1959 阅读 · 0 评论 -
explicit
class test{private: int _a;public: explicit test(int a) :_a(a) { } void print() { cout<<_a<<endl; }};int _tmain(int argc, _TCHAR* argv[]){ test a = 4; // ERROR test a(3); //必须原创 2014-09-17 23:42:54 · 562 阅读 · 0 评论 -
MFC文件的一个链接错误
记录遇到的一个诡异的编译问题使用ButtonST的时候,一个工程没有问题,当一个新的工程使用的时候,提示找不到CreateFile 和GetObject函数,但是这个两个函数在WINDOWS.H头文件里面肯定有的,花了好长时间,发现是链接到 POCO库里面去了,POCO的头文件污染了MFC的WINDOWS头文件所有在使用外部三方库或者类的时候,尽量不要在C源文件里面引用,不要...原创 2019-07-23 23:42:25 · 226 阅读 · 0 评论 -
map和hashmap性能测试
测试代码#include "stdafx.h"#include <set>#include <hash_set>#include <ctime>#include <iostream>#include <fstream>#include <common\TimeSpan.h>#include <win...原创 2019-08-24 17:00:35 · 726 阅读 · 0 评论 -
快速排序算法_C++
快速排序使用分治的方法,把数列按基准为界,分为左小右大两个子数列。然后按递归的思路,对两个子数列再进行快速排序,最终把整个数列有序排列。#include using namespace std;templatevoid exchange(T arr[], int i, int j){ T temp = arr[i]; arr[i] = arr[j]; arr[j] =转载 2014-02-19 10:35:24 · 807 阅读 · 0 评论 -
UML类图关系大全
UML类图关系大全1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。对象引用本身就是有向的,更适合表达我们所讨论的那种关系。所以这种关系在设计的时候比较少用到转载 2014-02-18 16:09:05 · 849 阅读 · 0 评论 -
sprintf,你知道多少?
<br /><br />选自《优快云 社区电子杂志——C/C++杂志》<br />http://emag.youkuaiyun.com 2005 年1 月 总第1 期 - 93 -<br />本文作者:steedhorse(晨星)<br />printf 可能是许多程序员在开始学习C 语言时接触到的第二个函数(我猜第一个是main),说<br />起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf 了解多<br />吗?在将各种类型的数据构造成字符串时,sprintf 的强大功能很转载 2010-09-28 11:38:00 · 474 阅读 · 0 评论 -
Effective C++读书笔记(一)
01:View C++ as a federation of languages.4个次语言 C:区块(blocks)、语句(statement)、预处理(preprocessor)、内置数据类型(built-in and type)、数组(arrays)、指针(pointers)Object-Oriented C++:class、封装(encapsulation)、继承(inheritance)、多态(polymorphism)、virtual函数(动态绑定)Template C++:STL:02:原创 2010-10-13 17:54:00 · 490 阅读 · 0 评论 -
关于c++中断言assert的说明 『转』
关于c++中断言assert的说明 『转』assert(条件) ;如果条件不满足则会弹出对话框 技巧1 assert(条件&&"说明信息") 由于对话框中会显示条件,因此可以利用这个特点显示说明信息,帮助定位错误 技巧2 assert(!"说明信息") 因为assert(0)肯定会显示对话框,可以帮助提示程序运行到哪里了,常用在switch case中转载 2012-09-14 10:52:55 · 1220 阅读 · 0 评论 -
SendMessage和PostMessage 的区别,以及消息循环路由
一、下面示例函数func()中有PostMessage和SendMessageint MainWnd(...) { MSG msg; while(1) { //当没有消息时,GetMessage不返回,程序就停在这里 GetMessage(&msg,NULL,0,0) TranslateMessage(&msg); DispatchMessage(&转载 2013-08-22 20:06:04 · 3889 阅读 · 1 评论 -
C++ string的trim, split方法
很多其他语言的libary都会有去除string类的首尾空格的库函数,但是标准C++的库却不提供这个功能。但是C++string也提供很强大的功能,实现trim这种功能也不难。下面是几种方法: 1.使用string的find_first_not_of,和find_last_not_of方法/* Filename : StringTrim1.cppCompiler : Visual转载 2013-08-21 13:04:42 · 143264 阅读 · 5 评论 -
C++内存泄露的问题
遇到一个很头疼的内存泄露的问题,调试的大半天才发现的,指针指向的对象1被delete了两次,而在VS2005中,debug中断的位置不是这个被多次delete的对象1,而是另外一个对象2,在释放它的时候,提示访问了未知的堆栈。虽然没有在内存中仔细进行调试,不过可以揣测出问题原因是,在多次释放对象1的时候,释放掉了对象2的资源,导致在释放对象2的资源的时候,访问未知的堆内存异常,而对象2在代码中原创 2013-09-04 00:59:27 · 786 阅读 · 0 评论 -
#pragma
<br />关于对齐的概念,我这里有文档 <br />发给大家 <br />什么是对齐,以及为什么要对齐: <br />现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 <br />对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平原创 2010-10-09 10:35:00 · 591 阅读 · 0 评论 -
C++ 智能指针详解
C++ 智能指针详解 一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_p转载 2013-10-14 12:55:56 · 685 阅读 · 0 评论 -
虚函数在类继承中的用法
// TestConsole.cpp : 定义控制台应用程序的入口点。//#include using namespace std;//class Aclass A{public: A() { cout<<"A Constructed"<<endl; } virtual ~A() { cout<<"A Destructed"<<endl; } void f原创 2013-10-17 17:47:20 · 871 阅读 · 0 评论 -
操作注册表,关闭计算机
MSDN代码BOOL MySystemShutdown(){ HANDLE hToken; TOKEN_PRIVILEGES tkp; // Get a token for this process. if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES原创 2013-10-29 13:25:54 · 873 阅读 · 0 评论 -
D3D显示FreeType读取的TFF字库
网上COPY的一段代码,进行了修改,效率有所提升,比IDirectFont显示字符的效率提高3-4倍,需要继续优化。1.纹理淘汰算法需要修改,LRU算法不错。#pragma once#include #include #include #include #include #include // 顶点数据结构struct FontVertex{ FontVerte转载 2013-11-08 18:34:31 · 3199 阅读 · 1 评论 -
OpenThread中的condition和barrier
condition应用condition源码#ifndef _WIN32CONDITIONPRIVATEDATA_H_#define _WIN32CONDITIONPRIVATEDATA_H_#ifndef _WINDOWS_#define WIN32_LEAN_AND_MEAN#include #endif#define InterlockedGet(x) Interlo原创 2013-11-25 19:34:50 · 3056 阅读 · 0 评论 -
成员函数的静态变量
成员函数的静态变量与类的静态变量相同点: 都是属于类本身,而不是类的对象。不同点: 类的静态变量需要初始化,可以设置访问权限,供外部调用,而成员函数的静态变量的初始化是在第一次调用函数时发生,外部也不能访问。测试代码#include using namespace std;class A{public: void test(int n) { static原创 2013-11-27 17:25:41 · 791 阅读 · 0 评论 -
Effective C++读书笔记(一)
类和函数:实现条款29:避免返回内部数据的句柄。条款30:避免这样的成员函数,其返回值是指向成员函数的非const指针或引用,也不要返回函数内部用new初始化的指针的引用条款31:千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用条款32:尽可能的推迟变量的定义条款33:明智的使用内联条款34:将文件间的编译依赖性降至最低原创 2013-12-31 17:49:25 · 586 阅读 · 0 评论 -
二叉树的深度排序算法
int depth(BTree root){ int ldepth, rdepth; if (!root) { return 0; } else { ldepth = depth(root->lchild); rdepth = depth(root->rchild); return ldepth > rdepth ? ldepth + 1; rdepth + 1;转载 2014-02-26 10:49:53 · 1185 阅读 · 0 评论 -
一道有趣的面试题————待解决的问题
先贴代码#include #include #include using namespace std;class Y {public: Y() { cout<<"Y()"<<endl; } Y(const Y& y) { cout<<"Y(Y&)"<<endl; } ~Y() { cout<<"~Y()"<<endl; } void operato原创 2014-02-26 10:44:44 · 720 阅读 · 0 评论 -
assert() c++ 使用方法
<br />转自http://hi.baidu.com/bevan_007/blog/item/3dc882319c3c521febc4af19.html<br />assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:<br />#include <assert.h><br />void assert( int expression );<br />assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打转载 2010-08-04 19:34:00 · 450 阅读 · 0 评论