
c++
文章平均质量分 62
zhsp1029
一直在努力,渴望成为高手
展开
-
深入剖析cppUNIT
一、单元测试与CPPUNIT简介几乎每个开发人员都写过测试代码,但是往往这些代码不系统,也没有良好的管理,同时在测试代码编写过程中也有很多重复的劳动,比较繁琐。在一个软件开发过程中,往往会进行很多修改,迭代开发的模型随处可见,如何验证程序的功能、性能和结构是否符合要求是一项重要的工作。 单元测试是属于白盒测试和结构性测试,一般由开发人员开展,当然如果有好的测试工具支持,测试人员甚至最终原创 2008-10-23 23:55:00 · 1775 阅读 · 0 评论 -
关于程序设计的两个小小感受
前几天需要在别人的代码的基础上做开发,需要添加一些新的东西。这时我发现了一个问题:尽管我只需要修改一个功能,但是我可能需要修改几个不同的代码模块。这是不合理的,理想的情况应该尽量控制变化的代码在同一个地方。我深深为此纠结了几天:我到底该不该对这个部分的代码重构呢?重构意味着时间的延后,意味着可能引入新的bug,意味着可能每天要加班到很晚;不重构,意味着我以后还会为此纠结...当然,最后我还是对原来原创 2009-10-11 23:23:00 · 422 阅读 · 0 评论 -
开发人员和自动化测试
这两天想把自己qzone中的日志全部删除,但是一百多篇日志,删除起来还是很麻烦,于是我想,写个脚本吧,让电脑帮我干这些简单乏味的工作。想起了以前曾经看过几天的watir,一个web自动化测试工具,嗯,就是它了。说干就干,用IEDevelop查看一下网页的结构,准备写脚本。但是一看,就傻眼了,大量的css布局,iframe嵌套,动态创建html代码,找起对象来,特别的难受,试了有半个小时,还是找原创 2009-09-15 21:13:00 · 580 阅读 · 0 评论 -
网络游戏同步原理荟萃
不知道大家是否碰到过这种情况,当某个玩家发出一个火球,这个火球有自己的运动轨迹,那么如何来判断火球是否打中了人呢?大部分情况,当策划提出这个要求的时候,一般会被程序否认,原因是:太麻烦了,呵呵。复杂点的还有包括两个火球相撞之类的事情发生。那么网络游戏中,是否真的无法模拟实现这种模拟呢?首先我们来看看模拟此种操作会带来什么样的麻烦:1,服务器必须trace火球的运行轨迹,乍一想,挺转载 2009-06-11 00:10:00 · 2241 阅读 · 0 评论 -
Detours使用说明
Detours使用说明 1 介绍... 12 Detours API hook. 12.1 hook DLL 中的函数... 22.2 hook自定义c 函数... 32.3 hook类成员函数... 42.4 DetourCreateProcessWithDll 52.5 Detouring by Address. 5 1 介绍 Api hoo原创 2009-05-17 16:02:00 · 10732 阅读 · 5 评论 -
客户端的gui自动化测试
最近一段时间在搞c/s客户端的自动化测试。在中国的大部分企业,自动化测试刚刚起步,大部分人都认为会使用一些商业的或者开源的自动化测试工具,如QTP之类,就算是进行自动化测试了。大谬也! 自动化测试按照基本步骤来说,其实就分为两部分:1 控件的自动化识别,2 结果的自动化比较。至于大家熟悉的suite,自动化测试报告等部分,则是以以上两部分为基础封装起来的,属于易用部分,不属于基础部原创 2009-05-17 15:30:00 · 1771 阅读 · 0 评论 -
map使用介绍
说明:如果你具备一定的C++ template知识,即使你没有接触过STL,这个文章你也应该可能较轻易的看懂。本人水平有限,不当之处,望大家辅正。 一.Map概述 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下ma转载 2009-07-15 20:33:00 · 431 阅读 · 0 评论 -
自己实现linux下ping工具
一 原理 ping命令工作在ip层,在程序中通过raw scket进行数据的收发,发数据时不需要填充ip头部,但是在接收数据时需要过滤掉ip头部信息。icmp头部重要的字段有三个,type,code,checksum,其中type表示命令的类型,对于ping命令来说,type的值为8表示发送icmp,type值为0表示是icmp的回包,code表示type下的子命令,对于ping命令来原创 2009-04-01 00:42:00 · 2037 阅读 · 0 评论 -
使用system()函数要谨慎
今天在使用system()函数启动apache时,出现了一个问题,程序伪代码如下:int sock = createSocket();bindSocket(sock,1111);listen();while((int clisock = accept())> 0){ string strRecvBuff = recvFromClient(clisock);原创 2009-03-30 21:03:00 · 4075 阅读 · 1 评论 -
进程和线程编程
进程和线程编程目 录进程和线程编程原始管道pipe()dup()dup2()popen()和pclose()命名管道创建FIFO操作FIFO阻塞FIFO消息队列msgget()msgsnd()msgrcv()msgctl()信号量semget()semop()semctl()转载 2009-03-21 11:51:00 · 648 阅读 · 0 评论 -
拷贝构造函数和运算符重载=
拷贝构造函数应用的场合由以下几个方面:1 函数的参数是一个对象,并且是值传递方式2 函数的返回值是一个对象,并且是值传递方式3 用一个对象初始化另外一个对象 由此,当函数的参数或者返回值为一个对象时,使用的时候要小心,因为值传递的时候执行的是位拷贝,并不会调用对象的构造函数,也就是说生成的临时对象可能不是正确初始化的,这样就可能会出现一些意向不到的问题。当返回值是个对象和用一个原创 2008-12-26 00:04:00 · 433 阅读 · 0 评论 -
开发一个简单的mysql代理
首先说明一下,本文不是介绍大名鼎鼎的那个mysql proxy,我做的这个应该是mysql客户端的代理。 首先说明一下背景,公司有一台数据库服务器,但是由于安全的需要,只对几个ip作了授权,其他的机器不能连接上。如下图所示: 现在有个工具开发需求,需要从每个人的工作pc上访问DB Server,由于不能直连,就在授权pc上做了一个mysql的代理。代理是一个小型的ser原创 2009-02-25 22:38:00 · 916 阅读 · 1 评论 -
什么时候需要定义拷贝构造函数
当没有定义拷贝构造函数时,对象值传递时是位拷贝,但是通常情况下,位拷贝已经能满足我们的要求,是我们不必自己定义拷贝构造函数。但是什么时候需要自己定义呢?这里有个简单的规则:如果你需要定义一个非空的析构函数,那么,通常情况下你也需要定义一个拷贝构造函数。如果你定义拷贝构造函数时遇到这样的错误: no copy constructor available or copy construct原创 2009-01-21 00:17:00 · 1384 阅读 · 0 评论 -
实现一个简单的linux线程池
线程池:简单地说,线程池 就是预先创建好一批线程,方便、快速地处理收到的业务。比起传统的到来一个任务,即时创建一个线程来处理,节省了线程的创建和回收的开销,响应更快,效率更高。 在linux中,使用的是posix线程库,首先介绍几个常用的函数:1 线程的创建和取消函数pthread_create创建线程pthread_join合并线程pthread_cancel原创 2009-01-17 22:24:00 · 5714 阅读 · 5 评论 -
进程间通信---信号量
信号量是一个计数器,用于多进程或者多线程之间的数据同步,最常用的是二进制信号量。为了获取资源,进程需要进行如下操作:1 测试控制该资源的信号量2 若信号量的值为正,表明进程可以使用此资源。进程将信号量的值减13 若信号量的值为0,则进程进入休眠状态,直至信号量大于零,进程被唤醒。 在linux中,信号量的测试和-1操作是原子性的,在内核中实现。下面就来介绍XSI信号量的原创 2008-12-31 00:14:00 · 1298 阅读 · 1 评论 -
一个通用的makefile写法,自动推导文件的依赖关系
今天看了一天的makefile的写法,东拼西凑,好不容易写出了一个makefile,颇有成就感,记录下来,以备温习之用。 假设有两个头文件目录 header1,header2;两个cpp文件目录,src1,src2,一个lib目录 写一个完整的makefile步骤如下:1 定义可执行文件的名称 TARGET = MyPro2 指定此编译工程所要使用的头文件所在的目录原创 2010-05-13 00:31:00 · 1431 阅读 · 0 评论