- 博客(37)
- 收藏
- 关注
原创 WebSocket使用(C++环境)(一) --- websocket++库的安装与使用
websocket官方网址:http://websocket.org/websocket++官方网址:https://www.zaphoyd.com/websocketppwebsocket++使用手册:https://www.zaphoyd.com/websocketpp/manual/今天接收到一个任务,说是使用websocket,这还不够,只能用C++语言,这就有点尴尬了。...
2016-11-30 20:16:25 51262 4
原创 C++使用C 的struct ----- 萃取的使用
下面是一个例子:struct C_point {......};class Point {public:operator C_point() { return _c_point; }//....private:C_point _c_point;};C struct 在C++中的一个合理用途:是当你要传递一个复杂的class object的
2016-11-29 12:00:07 507
原创 利用top和proc查看程序负载
1、ps -aufx找到top顶部占用资源大的程序进程号2、ls /proc/15539/ -l3、如果是以root启动的,执行下面步骤suls /proc/15539/ -l
2016-11-28 11:14:41 520
原创 freetds使用(二)---- 相关的API
参考网址:http://www.jb51.net/article/53450.htm http://infocenter.sybase.com/help/index.jsptopic=/com.sybase.help.ocs_12.5.1.dblib/html/dblib/X35104.htm 一、freetds API 1. Dbcmd和dbfcmd 函数原形
2016-11-25 19:56:21 1611 1
原创 freetds使用(一)--- 安装和使用
1 安装 wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz tar -zxvf freetds-stable.tgz cd freetds-0.91/ su - root ./configure --prefix=/usr/local/freetds --with-td
2016-11-25 19:49:36 1537
原创 svn 操作
1、检出svn co http://192.168.9.66/sinashow/mobile_live/server/mq_module2、添加新文件svn add 文件名注:告诉SVN服务器要添加文件了,还要用svn commint -m真实的上传上去!例子:svn add test.php添加test.phpsvn commit -m “
2016-11-25 19:44:01 190
原创 fastCGI的安装和使用
1 先安装2个包spawn-fcgi-1.6.4.tar.gzfcgi-2.4.1-SNAP-0910052249安装 fcgi-2.4.1-SNAP-0910052249报错:fcgio.cpp: In destructor 'virtual fcgi_streambuf::~fcgi_streambuf()':fcgio.cpp:50: error: 'EOF'
2016-11-22 10:37:50 4456
原创 Ngnix的安装和使用一(源码包安装)
1、安装相关工具yum -y install gcc automake autoconf libtool make2、正式安装一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩。 选定源码目录 可以是任何目录,本文选定的是/usr/local/src安装PCRE库ftp://ftp.csx.cam.ac.uk/pub/s
2016-11-22 10:34:14 350
转载 C++禁止类被继承
#include "stdafx.h"#include using namespace std;template class CFinalClass{friend T;private:CFinalClass(){}~CFinalClass(){}};class CXX{public:CXX(){ cout ~CXX
2016-11-21 18:44:38 453
原创 二重调度(七):再谈 初始化模拟虚函数表
这就是关于二重调度的所有要说的,但是,用如此悲观的条款来结束是令人很不愉快的。因此,让我们用概述初始化collisionMap的两种方法来结束。 按目前情况来看,我们的设计完全是静态的。每次我们注册一个碰撞处理函数,我们就不得不永远留着它。如果我们想在游戏运行过程中增加、删除或修改碰撞处理函数,将怎么样?不提供。 但是是可以做到的。我们可以将映射表放入一个类
2016-11-21 17:59:10 201
原创 二重调度(六):继承与模拟虚函数表
我们还有一个问题需要处理。 (如果,此时你奇怪老有最后一个问题要处理,你将认识到设计一个虚函数体系的难度。 )我们所做的一切将工作得很好,只要我们不需要在调用碰撞处理函数时进行向基类映射的类型转换。 假设我们开发的这个游戏某些时刻必须区分贸易飞船和军事飞船,我们将对继承体系作如下修改,根据 Item M33的原则,将实体类CommercialShip和MilitaryShip从抽象类Space
2016-11-21 17:54:38 169
原创 二重调度(五):使用非成员的碰撞处理函数实现
我们现在知道了怎么构造一个类似vtbl的映射表以实现二重调度的第二部分,并且我们也知道了怎么将映射表的实现细节封装在lookup函数中。因为这张表包含的是指向成员函数的指针,所以在增加新的GameObject类型时仍然需要修改类的定义,这还是意味着所有人都必须重新编译, 即使他们根本不关心这个新的类型。 例如, 如果增加了一个Satellite类型, 我们不得不在SpaceShip类中增加
2016-11-21 17:42:27 309
原创 二重调度(四):模拟虚函数表实现
有一个方法来增加选择。编译器通常创建一个函数指针数组(vtbl)来实现虚函数,并在虚函数被调用时在这个数组中进行下标索引。使用vtbl,编译器避免了使用if...then...else链,并能在所有调用虚函数的地方生成同样的代码:确定正确的vtbl下标,然后调用vtbl这个位置上存储的指针所指向的函数。 没理由说你不能这么做。如果这么做了,不但使得你基于RTTI的代码更具效率(下标索引加函数指针的
2016-11-21 17:21:33 280
原创 二重调度(三):只使用虚函数
其实有一个方法可以将用RTTI实现二重调度固有风险降到最低的,不过在此之前让我们看一下怎么只用虚函数来解决二重调度问题。 这个方法和RTTI方法有这同样的基本构架。collide函数被申明为虚,并被所有派生类重定义,此外,它还被每个类重载,每个重载处理一个派生类型: class SpaceShip; // forward decla
2016-11-21 17:04:13 288
原创 二重调度(二):用虚函数加RTTI 实现
虚函数实现了一个单一调度,这只是我们所需要的一半;编译器为我们实现虚函数,所以我们在GameObject中申明一个虚函数collide。这个函数被派生类以通常的形式重载: class GameObject { public: virtual void collide(GameObject& otherObject) = 0; ... };
2016-11-21 16:59:04 276
原创 二重调度(一):什么是二重调度?
有时,借用一下Jacqueline Susann的话:一次是不够的。例如你有着一个光辉形象、崇高声望、丰厚薪水的程序员工作,在Redmond,Wshington的一个著名软件公司--当然,我说的就是任天堂。为了得到经理的注意,你可能决定编写一个video game。游戏的背景是发生在太空,有宇宙飞船、太空站和小行星。 在你构造的世界中的宇宙飞船、太空站和小行星,它们可能会互相碰撞。假设其规
2016-11-21 16:53:33 1466
原创 使用代理类区分operator[]进行的是读操作还是写操作 — 懒惰计算思想的运用
扮演其它对象的对象通常被称为代理类在代理类的各种用法中,最神奇的是帮助区分通过operator[]进行的是读操作还是写操作我们想区分将operator[]用作左值还是右值,因为,对于有引用计数的数据结构,读操作的代价可以远小于写操作的代价。前面所讲的引用计数的使用,引用计数对象的写操作将导致整个数据结构的拷贝,而读不需要,只要简单地返回一个值。不幸的是,在operator[
2016-11-21 11:31:05 583
原创 引用计数的使用
在现存类上增加引用计数我们如何让一个位于支撑库中而无法修改的类获得引用计数的好处呢?我们现在可以应用这句格言:计算机科学中的绝大部分问题都可以通过增加一个中间层次来解决。RCWidget是给用户使用的类,RCOBject是操作引用计数的,CountHoler是一个中间层,Widget是需要添加引用计数的类RCObjcet可以被构造(作为派生类的基类部分)和析
2016-11-18 20:23:10 341
原创 smart pointer(灵巧指针)和继承类到基类的类型转换
假设我们有一个public继承层次结构,以模型化音乐商店的商品:class MusicProduct { public: MusicProduct(const string& title); virtual void play() const = 0; virtual void displayTitle() const = 0; ... }; c
2016-11-18 14:40:44 528
原创 禁止堆对象
例如,如果你想不想让用户在堆中建立UPNumber对象,你可以这样编写: class UPNumber { private: static void *operator new(size_t size); static void operator delete(void *ptr); ... }; 现在用户仅仅可以做允许它们做的事
2016-11-18 11:34:16 310
原创 判断对象是否在堆中分配
看下面的一个基类:class HeapTracked { // 混合类; 跟踪 public: // 从operator new返回的ptr class MissingAddress{}; // 异常类,见下面代码 virtual ~H
2016-11-18 11:16:26 612
原创 限制某个类能产生的对象数量
众所周知:只能生成一个对象的是单例模式,但是看一下情况:假设定义一个Printer 类:建立 Printer 对象 p1; 使用 p1; 释放 p1; 建立Printer对象p2; 使用 p2; 释放 p2; ... 这种设计在同一时间里没有实例化多个Printer对象, 而是在程序的不同部分使用了不同的Printer对象。不允许这样编写有些
2016-11-18 10:16:19 683
原创 将构造函数和非成员函数虚拟化
虚拟构造函数:从字面来看,谈论“虚拟构造函数”没有意义。当你有一个指针或引用,但是不知道其指向对象的真实类型是什么时,你可以调用虚拟函数来完成特定类型(type-specific)对象的行为。仅当你还没拥有一个对象但是你又确切地知道想要的对象的类型时,你才会调用构造函数。那么虚拟构造函数又从何谈起呢?例如,假设你编写一个程序,用来进行新闻报道的工作,每一条新闻报道都由文字
2016-11-17 19:35:10 332
原创 通过重载避免隐式类型转换
以下是一段代码,如果没有什么不寻常的原因,实在看不出什么东西: class UPInt { // unlimited precision public: // integers 类 UPInt(); UPInt(int value);
2016-11-17 11:49:05 347
原创 协助完成返回值的优化
一个返回对象的函数很难有较高的效率, 因为传值返回会导致调用对象内的构造和析构函数,这种调用是不能避免的。问题很简单:一个函数要么为了保证正确的行为而返回对象要么就不这么做。如果它返回了对象,就没有办法摆脱被返回的对象。就说到这。 考虑rational(有理数)类的成员函数operator*: class Rational { public: Rational(in
2016-11-17 11:15:41 257
原创 理解临时对象的来源
在C++中真正的临时对象是看不见的,它们不出现在你的源代码中。建立一个没有命名的非堆(non-heap)对象会产生临时对象。这种未命名的对象通常在两种条件下产生:为了使函数成功调用而进行隐式类型转换和函数返回对象时。 理解如何和为什么建立这些临时对象是很重要的,因为构造和释放它们的开销对于程序的性能来说有着不可忽视的影响。 首先考虑为使函数成功调用而建立
2016-11-17 10:49:38 438
原创 在构造函数中防止资源泄漏
如果你正在开发一个具有多媒体功能的通讯录程序。 这个通讯录除了能存储通常的文字信息如姓名、地址、电话号码外,还能存储照片和声音(可以给出他们名字的正确发音) 。为了实现这个通信录,你可以这样设计: class Image { // 用于图像数据 public: Image(const string& imageDat
2016-11-16 20:29:06 312
原创 使用析够函数时防止资源泄漏
对指针说再见。必须得承认:你永远都不会喜欢使用指针。 Ok,你不用对所有的指针说再见,但是你需要对用来操纵局部资源(local resources)的指针说再见。假设,你正在为一个小动物收容所编写软件,小动物收容所是一个帮助小狗小猫寻找主人的组织。 每天收容所建立一个文件, 包含当天它所管理的收容动物的资料信息,你的工作是写一个程序读出这些文件然后对每个收容动物进行适当的处理(a
2016-11-16 20:17:17 278
原创 vim编辑器的配置
在程序员眼中,有2种神:vim是神级编辑器,emacs是编译器之神,想学好这两种东西着实不易,在本文抛砖引玉,介绍一下vim的常用配置一、先上个人的vim界面二、相关配置1 安装ctagswget http://prdownloads.sourceforge.net/ctags/ctags-5.6.tar.gztar -z
2016-11-16 10:07:00 383
原创 在同一台物理机上配置多个ActiveMq主程序
一 复制一份配置文件 cd /var/activemq/ (第一个activemq的安装目录) cp -r conf conf1二 修改配置文件 1 修改activemq.xml cd conf1 vi activemq.xml #名称 brokerName="mq1" #不重复 #数据存放文件 ...
2016-11-16 09:53:49 2288
原创 ActiveMq的安装
第一步:avtiveMq服务端的安装博客网址: http://blog.csdn.net/chenxun_2010/article/details/52709277 http://sunbean.blog.51cto.com/972509/675529avtiveMq服务端程序下载网址:http://activemq.apache.org/activemq-590-release...
2016-11-16 09:41:59 631
原创 Valgrind工具的使用
本文参考自:http://www.cnblogs.com/cnjy/p/4484951.htmlhttp://www.ibm.com/developerworks/cn/linux/l-cn-valgrind/一、Valgrind介绍:Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它的主要作者是获得过Google-O'Reilly开源大奖的Julia
2016-11-16 09:23:49 296
原创 再谈ActiveMq:利用zookeeper配置HR模式(高可用模式)
本文参考自:http://blog.csdn.net/andyxuq/article/details/38231961一、配置环境环境1 在192.168.6.96上配置了一个zookeeper集群(3个),同时配置了一个Mq主程序2 在192.168.9.131上配置了2个Mq主程序二、zookeeper高可用配置(在之前的博客上已经讲解了如何配置zookeepe...
2016-11-15 17:02:06 779
原创 ActiveMQ的 HR + LB (高可用 + 负载均衡)部署方案
本文参考自:http://blog.csdn.net/jason5186/article/details/18703151http://www.open-open.com/lib/view/open1400126457817.html一、ActiveMq的多种部署方法1、Master-Slave部署方式(HR模式)1)shared filesystem Master-S...
2016-11-14 17:32:48 568
原创 Apache ActiveMQ 单点集群配置方法
本文章参考了:http://blog.csdn.net/jason5186/article/details/18702523一、为什么要配置集群构建高可用的AMQ系统在生产环境中是非常重要的,对于这个apache的消息中间件实现高可用非常简单,只要在Apache ActiveMQ单点基本配置基础上做一次配置变更(如果在一台设备上部署多个AMQ,需要修改对应端口号),即可实现。二、...
2016-11-14 14:51:52 739
原创 zookeeper使用(一): 单点和集群使用
本文章参考了:http://coolxing.iteye.com/blog/1871009jdk环境配置:http://blog.csdn.net/unix21/article/details/18774417zookeeper配置:http://blog.csdn.net/21aspnet/article/details/189908911、zookeeper下载 ...
2016-11-14 11:05:32 2440 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人