- 博客(219)
- 资源 (3)
- 收藏
- 关注
原创 关于std::size_t
首先四种类型都是无符号类型,是用以表示元素个数或者数组索引的最佳类型。在作为函数参数时,不需像有符号类型那样检测值是否小于零。1. ::size_t还是std::size_t请使用std::size_t,因为你处于C++的世界。在此,所有C++标准库组件用以表示元素个数的类型(比如size()或者operator[])都是std::size_t。std::size_t co
2013-09-28 10:57:00 3999 1
原创 指针容器的应用 --- boost::ptr_container介绍
指针容器的应用 --- boost::ptr_container介绍Scott Mayers在>, item 7 告诉我们,当把指针放入标准容器后,不要忘了在销毁容器时释放容器中指针所指向的object,否则"memory leak".例如:class CObj{...};std::vector objVector(3);objVector.push_back(
2013-09-27 17:10:00 2135
原创 boost.asio系列——buffer
创建buffer在io操作中,对数据的读写大都是在一个缓冲区上进行的,在asio框架中,可以通过asio::buffer函数创建一个缓冲区来提供数据的读写。buffer函数本身并不申请内存,只是提供了一个对现有内存的封装。char d1[128];size_t bytes_transferred = sock.receive(asio::buffer(d1));直接用字符串做b
2013-09-27 10:39:58 960
原创 boost.asio系列——socket编程
asio的主要用途还是用于socket编程,本文就以一个tcp的daytimer服务为例简单的演示一下如何实现同步和异步的tcp socket编程。客户端客户端的代码如下:#include#include#includeusing boost::asio::ip::tcp;int main(intargc,char* argv[]){try
2013-09-27 10:39:32 1141
原创 boost.asio系列——io_service
IO模型io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象)。asio::io_service io_service;asio::ip::tcp::socket socket(io_service);在asio框架中,同步的io主要流程如下:应用程序调用IO对象成员函数
2013-09-27 10:38:54 1047
原创 boost.asio系列——Timer
同步Timerasio中提供的timer名为deadline_timer,它提供了超时计时的功能。首先以一个最简单的同步Timer为例来演示如何使用它。#include#includeint main(){boost::asio::io_serviceio;boost::asio::deadline_timertimer(io, boost::posix_tim
2013-09-27 10:38:36 973
原创 STL文件读写基础
stl中对文件读写的函数在头文件fstream中定义,它的基本对象模型如下:其中包含三个对象ifstrea、ofstream和fstream,分别对文件提供只读、只写、读写功能,从其对象继承关系也可以看出这一点。下面就简单的介绍下基本的文件方法打开文件 打开文件一般有两种方式:1、在构造函数中打开 ifstream input("r:\\3.txt",ios::in |
2013-09-27 10:38:05 1202
原创 STL任务库简介
管理任务在C++ 11的thread库引入了std::async函数,通过它可以非常容易的实现类似于.net中的Task方式的并发。void printf_thread_id(constchar* name){cout }int main(){printf_thread_id("Main Thread");std::future task1 = std::a
2013-09-27 10:37:09 878
原创 STL线程库简介
STL线程库的前身是boost::thread,在C++ 11标准化后便正式归纳入了stl库,通过它我们可以很容易实现跨平台的线程管理。线程管理在std::thread库中,一个线程用的是一个thread对象表示,当创建一个thread对象时即创建一个线程,一个简单的示例如下:#include#includeusingnamespace std;void thr
2013-09-27 10:35:57 1290
原创 boost::checked_delete作用介绍
C++标准(版本5.3.5/5)允许使用delete删除incomplete class types指针,但如果class的析构函数有特定数据操作,或者具有自定义的operator delete成员函数,那么删除指针的操作将导致不确定后果。这个问题同样存在于smart pointer的析构函数中,比如:boost::scoped_ptr::~scoped_ptr,如果T是一个incomplet
2013-09-26 11:01:45 1489
原创 boost::make_shared
shared_ptr很好地消除了显式的delete调用,如果读者掌握了它的用法,可以肯定delete将会在你的编程字典中彻底消失。但这还不够,因为shared_ptr的构造还需要new调用,这导致了代码中的某种不对称性。虽然shared_ptr很好地包装了new表达式,但过多的显式new操作符也是个问题,它应该使用工厂模式来解决。因此,shared_ptr在头文件 中提供了一个自由工厂函数
2013-09-25 11:04:05 20472
原创 Boost的动态多维数组-multi_array
Boost.MultiArray是一个动态多维数组库。它实现了一个通用、与标准库的容器一致的接口,并且具有与C++中内建的多维数组一样的接口和行为。简短的例子以下是使用 multi_array 的一个简短例子:#include "boost/multi_array.hpp"#include int main () { // 创建一个
2013-09-25 10:34:26 6436
原创 Boost预报——通用几何库(GGL)
用共享内存作为匿名内存池只要分配共享内存段的一部分作为缓存区,把信息复制进去,再把缓存区在共享内存中的偏移值发送给另外的进程,任务就完成啦!让我们看一个例子:#include boost/interprocess/managed_shared_memory.hpp>#include cstdlib> //std::system#include sstream>int mai
2013-09-25 10:31:37 1865 1
原创 Boost学习之CRC校验
循环冗余校验(CRC)是一种根据网络数据封包或电脑档案等数据产生简短固定位数的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。循环冗余校验(CRC)是一种根据网络数据封包或电脑档案等数据产生简短固定位数的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是由W. Wesley Peterson在他1961年发表的论文中披露。[来自维基百科]CRC
2013-09-25 10:30:54 6095
原创 boost::function用法详解
要开始使用 Boost.Function, 就要包含头文件 "boost/function.hpp", 或者某个带数字的版本,从"boost/function/function0.hpp" 到"boost/function/function10.hpp". 如果你知道你想保存在function 中的函数的参数数量,这样做可以让编译器仅包含需要的头文件。如果包含"boost/func
2013-09-24 17:56:52 965
原创 boost.asio 学习笔记07——总结
至此,我们对boost.asio的基本体系结构以及在windows上的实现,做了一个梳理;个人认为常用到的操作及其实现都涉及到了。当然,本文并没有对非Win环境下的实现、SSL,串口、buffer管理、以及如何使用asio等进行讨论。针对asio,个人也是刚刚接触正在学习,觉得要想使用好他,还是首先要了解socket的基本操作,在windows环境下,还要了解IOCP模型,然后才能用好它。
2013-09-23 16:12:35 953
原创 boost.asio 学习笔记06——其他
asnyc_read VS. async_read_some VS. async_receiveasync_read是一个全局函数;后面两个则于ip::tcp::socket的成员个函数;都可以用来异步读取操作,他们有什么样的差别呢。先来看async_read_some和async_receive,他们的文档说明如下:async_read_some: Start an asynchro
2013-09-23 16:11:53 1259
原创 boost.asio 学习笔记05——asio的windows实现
Operation还记得前面我们在分析resolver的实现的时候,挖了一个关于operation的坑?为了不让自己陷进去,现在来填吧;接下来我们就来看看asio中的各种operation。和前面提到过的service的类似,这里的operation也分为两大系:IOCP Enable和Disable系列。这里我们重点关注下图中红色部分表示的IOCP Enable系列operati
2013-09-23 16:11:25 1337
原创 boost.asio 学习笔记04——asio的体系结构
三层类关系图根据前面的分析,我们知道asio有着这样的逻辑:参考STL,提供basic模版,对外使用basic模版的实例提供接口。basic模版将具体操作委托给下层服务类完成。下层服务类再把操作委托给平台相关的服务类。鉴于此,我们将asio体系划分为三层:io object层,basic_模版类层,服务层。第一层:io object层,作为应用程序直接使用的
2013-09-23 16:10:48 1046
原创 boost.asio学习笔记03——io objects
asio的文档,告诉我们在声明一个io_service对象之后,就可以创建io对象去干活了,例如:int main(int argc, char* argv[]){ boost::asio::io_service io_service;tcp::resolver resolver(io_service);tcp::resolver::query query(
2013-09-23 16:10:33 1152
原创 boost.asio 学习笔记02——io_service类
从第一个boost.asio的教程开始,boost文档就一直在告诉我们:使用boost.asio第一步就是要创建一个io_service对象。那么io_service是个什么东西呢?boost.asio文档说,io_service为下面的这些异步IO对象提供最核心的IO功能:boost::asio::ip::tcp::socketboost::asio::ip::tcp::ac
2013-09-23 16:09:20 1174
原创 boost.asio 学习笔记01——概述
boost.asio为异步IO提供了一份标准的C++的跨平台实现,特别针对网络IO提供了良好的支持,使之成为C++网络编程利器。关于如何使用asio,boost文档中已经有了详尽说明,而且附带的例子也很直观,我们不必再造轮子;本文则结合asio的基本应用,侧重于源代码的分析,特别是针对windows平台上的实现进行分析。纵观asio源码,在统一的接口层之下,asio提供了大量的类来支持不同
2013-09-23 16:08:39 1037
原创 SVN快速入门教程
如何快速建立Subversion服务器,并且在项目中使用起来,这是大家最关心的问题,与CVS相比,Subversion有更多的选择,也更加的容易,几个命令就可以建立一套服务器环境,可以使用起来,这里配套有动画教程。本文是使用Subversion最快速的教程,在最短的时间里帮助您建立起一套可用的服务器环境,只需略加调整就可以应用到实际项目当中。 本教程分为以下几个部分,为了说明简单,教程
2013-09-23 10:54:07 1254
原创 VS2008配置SVN
最近在使用VSS的过程中觉得不太好用,怀念之前使用SVN的日子,今天有点时间来试下.NET下用SVN------准备软件:1.AnkhSvn-2.1.8420.8.msi --VS下SVN插件2.Subversion-1.5.3.msi --Subversion服务端3.TortoiseSVN-1.5.3.13783-win32-svn-1.5.2.msi --SVN客户端
2013-09-23 10:20:24 2666
原创 内存对齐
在C程序设计中我们经常需要用到一种数据类型的长度(占内存的字节数),例如: int *p = NULL; p = (int *)malloc(10*sizeof(int));/*用sizeof(int)来的到int类型的长度*/ 用sizeof可得到C语言中数据类型的长度,对基本数据类型而言,结果值很容易理解,但当sizeof的操作对象是一个结构类型时意想不到麻烦就来了,其结
2013-09-22 16:21:25 801
原创 什么叫内存对齐 -就是字节对齐
字,双字,和四字在自然边界上不需要在内存中对齐。(对字,双字,和四字来说,自然边界分别是偶数地址,可以被4整除的地址,和可以被8整除的地址。)无论如何,为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。一个字或双字操作数跨越了4字节边界,或者一个四字操作数跨越了8字节边界,被认为是
2013-09-22 16:11:08 2385
原创 C++ 中各种数据类型所占的字节
遇到了数据存储的大端和小端问题,这你妹的看的一头雾水,发现我基本知识严重匮乏啊,先了解C++各数据类型在自己机子上占多少字节吧,以及这些数据类型所占字节大小与神马有关。各种查资料然后写代码检验,小结于本文中,给自己补补基础知识。先来列一下C++的数据类型:整型:int,long。这两个还分signed(有符号)和unsigned(无符号)的,当然有符号和无符号所占字节大小是一样的,就不管他
2013-09-22 16:01:44 3097
原创 C和C++中的逻辑运算和位运算
1:&&具有短路特性,如果前一个逻辑表达式计算的结果是错,则不会继续进行第二个逻辑表达式的计算。2:||也是一个操作符,它可以用于把两个其他的逻辑表达式合并成一个。如果那两个表达式中有任何一个计算结果是对则合并后的结果就是对,否则结果为错。这个操作符也具有短路特性,如果第一个逻辑表达式计算结果是对则整个结果一定是对,就不会进行第二个逻辑表达式的计算了。3:!也是一个逻辑表达式,它可以用于对
2013-09-22 15:44:49 1729
原创 子类调用父类构造和析构函数的顺序
#include using namespace std;class A{public: A(){cout<<"Construct a"<<endl;p();} virtual void p(){cout<<"A"<<endl;} ~A(){cout<<"Destruct a"<<endl;p();} };class B : public A
2013-09-22 15:27:41 4151
原创 VS2008源代码管理软件组合-visualSVN Server+TortoiseSVN+AnkhSvn
基于VS2008 Team开发环境的源代码版本控制需要以下软件,安装顺序没有限制,一切默认安装即可:(1) VisualSvn Server(版本控制服务器)免费开源软件。版本号:VisualSvn-Server-2.1.4.msi,官方下载地址:http://www.visualSvn.com/files/VisualSvn-Server-2.1.4.msi(2) Tortois
2013-09-22 10:20:49 1370
原创 QT4.7和VS2008 顺利安装必读 (最新版)
刚毕业踏入工作,做项目需要在VS下用QT开发环境,最近查了不少资料,很多种安装方法,对于我这种初步接触QT的,看的头都大了。经过几番测试,终于搞定QT4.7在VS2008下的安装,实际so easy。都是版本惹的祸。总结起来网上流行的安装说明有以下几个问题需要解释清楚:1,到底需要下载什么软件?软件版本混乱。那些安装说明只是针对过去旧版本的QT,还有要求下载VS2008 SP1
2013-09-22 10:19:12 2864
原创 这是转来的 Visual 2005 和Qt的配置使用过程 希望有用
【转】win32 搭建QT和VS2005开发平台。2011年02月28日 星期一 下午 07:37转载自 风夜蓝最终编辑 liyi6891OS:windows7 (7601).IDE : VS2005QT版本:qt-everywhere-opensource-src-4.7.0和qt-sdk-win-opensource-2010.05两
2013-09-21 16:29:14 901
原创 在VS2008中使用Qt编程
一、安装所需软件1. 下载安装VS2008;2. 下载qt-win-opensource-4.7.0-vs2008.exe,并安装。这里我们假设安装在C:\Qt4.7.0下;3. 下载qt-vs-addin-1.1.7.exe,并安装。这三个软件安装好后,在VS的菜单界面上就会出现"QT"选项了。二、环境配置1. 用VS新建一个win32控制台应用程序,我们假设工程
2013-09-21 15:41:28 1106
原创 解决boost::asio的WinSock.h has already been included
最近在调人脸检测方面的新算法的代码,老是提示WinSock.h has already been included,有人已经给出解决方案,转载过来以铭记。开始使用boost::asio库时,编译碰到这个错误提示:fatal error C1189: #error : WinSock.h has already been included查了下抛出这个错误的boost代码,原来是定义了_
2013-09-21 15:31:20 1057
原创 配置Boost的VS2008开发环境
1. 下载并解压Boost C++ Libs下载地址:SourceForge:http://sourceforge.net/projects/boost/files/boost/1.48.0/Boost Official:http://www.boost.org/users/history/version_1_48_0.html (实际上也是从SourceForge下载)解压到 E
2013-09-21 15:24:03 1092
原创 VS2008安装boost(手记)
1。转自http://blog.csdn.net/benjiamen/archive/2008/07/12/2643705.aspx boost库2008年3月底发布了1.35.0版本,包括了12个新的库和若干对于新库的修正。请参见http://www.boost.org/users/news/version_1_35_0来获取详细的更新信息。最大的喜讯就是提供了对于Vis
2013-09-21 14:50:48 1014
原创 OpenGL安装
OpenGL 开发环境配置 参考:http://3140618.blog.163.com/OpenGL 下有一些重用的辅助库,比如glut,glew等等,在windows平台下需要自己安装,因为微软为了推广自己的DX,在windows下只支持openGL 1.1版本。你可以打开\Microsoft Visual Studio X.X\VC\include\gl\gl.h 或 \Microsof
2013-09-21 09:42:02 1629
原创 Boost 1.46.1编译成VS2008版本
今天Boost.org上下载了Boost的最新版本1.46.1,然后编译成VS2008的可用版本,总耗时大概20分钟左右。步骤如下:1. 至Boost.org上下载Window下的Boost最新版 http://sourceforge.net/projects/boost/files/boost/1.46.1/ PS: 我下载的后缀为.7z的压缩版本。2. 解压至本地硬盘,我解压在D:
2013-09-20 19:45:29 918
原创 并发服务器:多路复用I/O
基于I/O 多路复用技术的并发服务器在实际的应用中,要求一个服务器能同时处理大量的客户请求,所有这些客户将访问绑定在某一个特定套接字地址上的服务器。因此,服务器必须满足并发的需求。如果不采用并发技术,当服务器处理一个客户请求时,会拒绝其他客户端请求,造成其他客户要不断的请求并长期等待。在Linux(Unix)系统中并发服务器有三种设计方式:(1)多进程进程是执行中的
2013-09-19 20:53:04 3200
redis设计与实现(第二版) 带目录
2017-09-01
redis-3.0注释版源码
2017-09-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人