abcdef

01 2013 档案

摘要:背景: 要找到函数的调用者, 要快速理清代码流程, 看到n多函数调用, 一不小心就会把本挫人绕晕@_@目的: 为了直观体现本函数的调用者策略: 对函数命名进行管理具体方式: 1.函数名要体现出功能外, 还要体现出调用者, 比如"发送消息"的函数, 只被XXX调用, 可以命名为XXX_SendMsg 2.如果调用者有多个, 可以把多个调用者划分成一类, 同类的调用者用统一的前缀命名, 比如AAAfoo, 被调用的低一级函数可以命名为AAA_functionname 3.还没想好.....好处: 限制了函数的调用者, 防止谁都来随便调用, 泛滥调用, 造成逻辑混乱; 可以帮助函 阅读全文
posted @ 2013-01-30 10:46 jianc 阅读(505) 评论(0) 推荐(0)
摘要:typedef _StructTest{ ....}StructTest, *PStructTest;PStructTest pStruct = new StructTestreinterpret_cast<const char*>(&pStruct) // --- 额额额额额已经是一级指针了, 被本挫人引用成二级指针然后再转成一级指针来用, 结果很悲剧, 查了大半天............wwwwwwwwwwwwwwwwwwwww 阅读全文
posted @ 2013-01-30 10:20 jianc 阅读(180) 评论(0) 推荐(0)
摘要:之前没经验, 发送数据包的时候, 包头包尾等信息都是通过重新定义一个结构体实现, 不同的协议包就有不同的结构体, 结果导致这样的现象: 有多少上层业务协议包, 我就分别重新定义一个对应的加上包头包尾的新的结构体, 很费劲.......额....现在, 重新想了下, 一个改进的方式, 把"封包"过程抽象出来, 使用Qt的QByteArray来操作流数据(还是挺方便的).h#ifndef PACKET_H#define PACKET_H#include <QObject>#include <QByteArray>#define FrontPacket & 阅读全文
posted @ 2013-01-29 16:28 jianc 阅读(4030) 评论(0) 推荐(0)
摘要:开源协议, 今天才了解到.......................aaaaaaaaaaaaaaaaaaaaaddddddd 阅读全文
posted @ 2013-01-29 14:31 jianc 阅读(167) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2013-01-29 13:36 jianc 阅读(136) 评论(0) 推荐(0)
摘要:总体思路:这里用select IO模型当接收到网络数据流的时候, 直接把数据丢到一个缓冲区中去这里封装了对缓冲区操作的类, 提供的接口操作包括:1.添加(追加)流数据到缓冲区2.取出缓冲区第一个合法的包(拆掉包头包尾等数据)就两个操作接口, 很简单的操作为了方便操作数据流, 可以用一些现成的容器去处理, 如果用Qt开发, 可以用QByteArray, 如果用VC开发, 可以用stringQt:.hclass DataPack : public QObject{ Q_OBJECTpublic: explicit DataPack(QObject *parent = 0); ... 阅读全文
posted @ 2013-01-28 11:12 jianc 阅读(1961) 评论(0) 推荐(0)
摘要:连接地址:http://www.codeproject.com/Articles/13370/LiteZip-and-LiteUnzip下载下来, 经过测试, 可以正常解压zip格式的压缩文件, 接口函数很简单, 解压到单前目录, 支持解压文件夹还没细细去测过, 压缩接口函数未测过发现的问题:1.如果解压的文件不存在或不是zip格式, cpu会发飙 --有待继续验证2.如果当前有重名文件或文件夹, 解压时候不知道是否会覆盖 --还没验证3.其他待补充........................... 阅读全文
posted @ 2013-01-24 17:17 jianc 阅读(903) 评论(0) 推荐(0)
摘要:当要处理一些比较耗时的任务时, 一般是把这些任务放到一个工作线程中去执行, 否则会阻塞界面的响应, 导致用户体验差....所以经常会用到线程从任务角度上看, 线程大致分两类, 界面线程(UI线程, 一般由主线程充当); 工作线程(有UI线程创建, 根据生命周期, 可再细分为长期线程和临时线程)vc中, 创建线程可以通过多种方式, 这里说线程就是一个可以和其他线程"并发"执行的函数, 一个随便写的例子:unsigned __stdcall _netWorkThread(void *pVoid){ cout << "network thread runni 阅读全文
posted @ 2013-01-24 10:24 jianc 阅读(2347) 评论(0) 推荐(0)
摘要:理由:为了方便得到调试信息, 编写MessageBox弹出消息太挫了, 而且会阻塞线程或者一不小心会弹出n多个小窗口其实也可以用::OutputDebugString配合一个DebugView工具, 感觉又是后也是挺不方便或者直接打日志也行, 但不太直观, 感觉不能"立即"看到效果搜索了下方法, 在GUI程序中调出一个CUI窗口打印调试信息的简单方法:在合适的地方调用如下方法:if(AllocConsole()){ freopen("CONOUT$","w",stdout); cout << "debug...& 阅读全文
posted @ 2013-01-23 14:15 jianc 阅读(470) 评论(0) 推荐(0)
摘要:封包和拆包(转)对于基于TCP开发的通讯程序,有个很重要的问题需要解决,就是封包和拆包.自从我 从事网络通讯编程工作以来(大概有三年的时间了),我一直在思索和改进封包和拆包的方法.下面就针对这个问题谈谈我的想法,抛砖引玉.若有不对,不妥之 处,恳求大家指正.在此先谢过大家了.一.为什么基于TCP的通讯程序需要进行封包和拆包.TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想想河里的流水,是连成一片的,其间是没有分界线的.但一般通讯程序开发是需要定 义一个个相互独立的数据包的,比如用于登陆的数据包,用于注销的数据包.由于TCP"流"的特性以及 阅读全文
posted @ 2013-01-21 14:16 jianc 阅读(559) 评论(0) 推荐(0)
摘要:1.使用某种工具做好一个可启动的u盘pe系统2.连接好u盘, 开始->运行输入命令: diskmgmt.msc, 得到u盘的磁盘号, 假设u盘的盘符为G:, 磁盘号为13.打开cmd, 进入virtual box的安装目录下, 运行命令:VBoxManage.exe internalcommands createrawvmdk -filename g:\usbdisk.vmdk -rawdisk \\.\PhysicalDrive1提示 RAW host disk access VMDK file g:\usbdisk.vmdk created successfully. 表示成功4.打 阅读全文
posted @ 2013-01-14 16:54 jianc 阅读(3052) 评论(0) 推荐(0)