C++编程
zgl_dm
这个作者很懒,什么都没留下…
展开
-
epoll模型设计海量级连接服务器
原文请参考:http://blog.sina.com.cn/s/blog_659c1e660100p5hk.html最近在参与一个海量级(20000以上)远程连接的服务器设计,由于用户要求的硬件平台仅限于Linux,因此选择了epoll模型来实现对海量客户端连接的处理。 先聊一下epoll模型的基本情况。(一般来说,非海量级客户端连接的服务器,可能用不到epoll模型。一方面是转载 2013-02-19 17:22:18 · 1027 阅读 · 0 评论 -
关于智能指针 auto_ptr
1、设计动机: 在函数中通常要获得一些资源,执行完动作后,然后释放所获得的资源,当程序员忘记释放所申请的到的资源,或者由于异常发生而没有正常释放资源时,这就将产生一系列的内存泄漏问题。2、主要函数 (1) reset 函数 重设需要管理的指针,首先 auto_ptr 会删除当前管理的对象,然后再设置新的对象的指针。 Point *p1 = new Point(1.0,2.0); Point *p2 = new Point(2.0,3.0); auto_ptrpstr;原创 2010-06-07 11:02:00 · 699 阅读 · 1 评论 -
常量指针与指针常量
一、常量指针 常量指针就是指向常量的指针,指针所指向的地址的内容是不可修改的。指针为一变量,其内容存放常量的地址。int m =10;const int * p = &m;// 亦可以写成 int const *pi= &m;cout原创 2010-06-04 11:16:00 · 649 阅读 · 0 评论 -
关于深拷贝与浅拷贝
1.拷贝构造函数 当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用。也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数:一个对象以值传递的方式传入函数体 一个对象以值传递的方式从函数返回 一个对象需要通过另外一个对象进行初始化。如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的位拷贝。位拷贝又称浅拷贝。2. 浅拷贝和深拷贝 在某些状况下,类内成员变量需要动态原创 2010-06-02 15:19:00 · 917 阅读 · 1 评论 -
C/C++数组名与指针区别深入探索
引言 指针是c/c++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在c语言的教学过程中也错误得给学生讲解:/"数组名就是指针/"。很幸运,我的大学老师就是其中之一。时至今日,我日复一日地进行着c/c++项目的开发,而身边还一直充满这样的程序员,他们保留着/"数组名就是指针/"的误解。 想必这种转载 2010-05-13 09:54:00 · 696 阅读 · 0 评论 -
关于位运算的应用
应用一、计算二进制1的个数 Lets first look at a test question that from Microsoft, and the question as bellow: 求下面函数的返回值 int func(int x) { int countx = 0; while(x) { coun原创 2010-05-10 16:54:00 · 604 阅读 · 0 评论 -
转载 Socket 函数库(二)
hstrerror返回网络错误原因的描述字符串 相关函数:herror表头文件:#include 函数定义:const char *hstrerror(int err)函数说明:hstrerror()用来依参数err的错误代码来查询socket错误原因的描述字符串, 然后将该字符串指针返回返回值 :返回描述错误原因的字符串指针范例:/*显示错误代码0转载 2010-05-09 15:20:00 · 1222 阅读 · 0 评论 -
Socket 函数库(一)
accept接受socket连线 相关函数:socket, bind, listen, connect表头文件:#include #include 函数定义:int accept(int s, struct sockaddr *addr, int *addrlen)函数说明:accept()用来接受参数s的socket连线。参转载 2010-05-09 15:18:00 · 1140 阅读 · 0 评论 -
C++ Singleton design pattern
Why use a singleton class? This design pattern and methodology ensures that only one instance of the C++ class is instantiated. It assures that only one object is created and no more转载 2010-05-07 12:02:00 · 1850 阅读 · 0 评论 -
POSIX thread (pthread) libraries
Thread Basics: Thread operations include thread creation, termination, synchronization (joins,blocking), scheduling, data management and process interaction. A thread does not转载 2010-05-07 11:41:00 · 1015 阅读 · 0 评论 -
本机运行正常的ADO程序在别的机器上无法运行的问题
CSDN论坛上经常看到在本机编译运行正常的使用了ADO的程序放到别的机器上就不能运行了,我原来也碰到过这样的问题,后来发现是ADO引擎版本的问题,安装了VC的机器一般其数据库引擎版本都比较高,到低版本的系统就出问题了,解决方法就是把MDAC连同你的程序一起安装到目标机器,但是有没有更好的解决方法呢?答案是有的,就是改动一下你的源代码,一般调用ADO的程序代码里都会有这样一句: #impor转载 2008-06-18 20:56:00 · 1076 阅读 · 1 评论 -
本机运行正常的ADO程序在别的机器上无法运行的问题
CSDN论坛上经常看到在本机编译运行正常的使用了ADO的程序放到别的机器上就不能运行了,我原来也碰到过这样的问题,后来发现是ADO引擎版本的问题,安装了VC的机器一般其数据库引擎版本都比较高,到低版本的系统就出问题了,解决方法就是把MDAC连同你的程序一起安装到目标机器,但是有没有更好的解决方法呢?答案是有的,就是改动一下你的源代码,一般调用ADO的程序代码里都会有这样一句: #impor转载 2008-06-18 20:56:00 · 799 阅读 · 0 评论 -
Using the Flexgrid in VC++
IntroductionWhen I had to use the flexgrid for the first time, I was too frustrated to find out that no proper documentation existed on the net. The ones available were too complicated for me转载 2008-04-23 22:36:00 · 1951 阅读 · 2 评论 -
获取指定文件夹下文件列表
void CMachine::Excute()...{ SetCurrentDirectory(_T(m_path)); WIN32_FIND_DATA fd; HANDLE hFind=::FindFirstFile(_T("*.*"),&fd); if(hFind!=INVALID_HANDLE_VALUE) .转载 2007-11-26 12:56:00 · 816 阅读 · 0 评论 -
多线程程序设计-互斥信号量
互斥量有两种状态: lock和unlock, 它确保同一时间只有一个线程访问数据。 如下的代码存在两个线程,分别对全局变量做增1和减1操作,若不应用同步机制则输出结果比较混乱,即加1操作与减1操作相间。#include #include #include int num=0;void * func1(void *){ for(int i = 0; i原创 2010-06-21 17:33:00 · 1354 阅读 · 0 评论 -
const在函数声明中的应用-zt
1.在一个函数声明中,const 可以修饰函数的返回值,或某个参数;对于成员函数,还可以修饰是整个函数。有如下几种情况,以下会逐渐的说明用法: A& operator=(const A& a); void fun0(const A* a ); void fun1( ) const; // fun1( ) 为类转载 2013-01-05 16:10:46 · 598 阅读 · 0 评论 -
Secure Coding Best Practices for Memory Allocation in C and C++
IntroductionTomes (and I'm talking of real big tomes) are available on secure coding in C and C++. They describe the details of the language, why C, C++ are so insecure and coding patterns and anti-转载 2013-02-04 11:25:25 · 806 阅读 · 0 评论 -
非阻塞socket与epoll的ET模式结合使用注意事项
当非阻塞socket与epoll的ET模式结合使用进行编程时需要注意的事项:当客户端与服务端建立连接数据通信完成后,即服务端收到客户端的数据后,再向客户端发送数据,当发送完数据后立马断开连接。客户端epoll_wait和read的处理:while(1){ nfds = epoll_wait(epfd_rcv, events, EVENTSIZE , -1);// get转载 2013-02-04 17:54:27 · 1322 阅读 · 0 评论 -
epoll的一些思考
Epoll基本介绍在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于 select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd 数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:转载 2013-02-01 17:46:55 · 917 阅读 · 0 评论 -
更好的内存管理-jemalloc
今年年初由于facebook而火起来的jemalloc广为人之,但殊不知,它在malloc界里面很早就出名了。Jemalloc的创始人Jason Evans也是在FreeBSD很有名的开发人员。此人就在2006年为提高低性能的malloc而写的jemalloc。Jemalloc是从2007年开始以FreeBSD标准引进来的。软件技术革新很多是FreeBSD发起的。在FreeBSD应用广泛的技术会慢转载 2013-02-01 10:06:06 · 4452 阅读 · 0 评论 -
Core Dump解析(1)
今天调试一个程序, 用到了core dump, 但是不知道是做什么用的,查了一下,明白了些, 记于此.什么是Core Dump?Core的意思是内存, Dump的意思是扔出来, 堆出来.开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序转载 2013-02-01 09:31:23 · 904 阅读 · 0 评论 -
core dump解析(3)-配置与调试
LinuxCore Dump 配置与调试1.core文件的生成开关和大小限制---------------------------------1)使用ulimit-c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。2)使用ulimit-cfilesize命令,可以限制core文件的大小(filesize的单位为kbyte)。若转载 2013-02-01 09:34:41 · 840 阅读 · 0 评论 -
epoll使用
epoll的工作原理是,你如果想进行IO操作时,先向epoll查询是否可读或可写,如果处于可读或可写状态后,epoll会通过epoll_wait函数通知你,此时你再进行进一步的recv或send操作。epoll仅仅是一个异步事件的通知机制,其本身并不作任何的IO读写操作,它只负责告诉你是不是可以读或可以写了,而具体的读写操作,还要应用层自己来作。epoll仅提供这种机制也是非常好的,它保持了事转载 2013-01-31 15:30:37 · 1083 阅读 · 0 评论 -
epoll使用详解(精髓)
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且转载 2013-01-31 15:32:10 · 630 阅读 · 0 评论 -
Boost多线程编程
背景• 今天互联网应用服务程序普遍使用多线程来提高与多客户链接时的效率;为了达到最大的吞吐量,事务服务器在单独的线程上运行服务程序; GUI应用程序将那些费时,复杂的处理以线程的形式单独运行,以此来保证用户界面能够及时响应用户的操作。这样使用多线程的例子还有很多。• 跨平台 创建线程• 头文件 namespace转载 2013-01-11 17:57:31 · 797 阅读 · 0 评论 -
C++ Multithreading
Multithreading is a specialized form of multitasking and a multitasking is the feature that allows your computer to run two or more programs concurrently. In general, there are two types of multitaski转载 2013-01-10 16:28:48 · 1370 阅读 · 0 评论 -
fastcgi中的多线程使用
0.背景在项目中加入了等待通讯的内容,所以原来单个请求处理时间增加了。单线程处理的fcgi就会浪费CPU和用户时间,所以需要多线程来处理,减少用户排队时间。将处理用户请求的部分从单线程变为多线程,需要大概了解改动会不会影响性能。得到的结论是:多线程和单线程在执行的流程和使用方法几乎一样,所以多线程不会带来额外的负担。1.单线程的处理步骤1.1一个简单的单线程fcgi请求转载 2013-01-10 15:11:59 · 4548 阅读 · 0 评论 -
无名信号量
在POSIX标准中,信号量分两种,一种是无名信号量,一种是命名信号量。无名信号量只用于线程间,命令信号量只用于进程间。信号量是属于POSIX:SEM的,不是属于POSIX:THR的,需要的文件头是无名信号量是用来保护和共享线程间的临界区和共享资源的。它比起互斥锁功能更强大,互斥锁只是用来排他性访问临界区和共享资源,当一个线程要访问临界区或共享资源时,就必须先加锁,访问完成后再解锁,也就是说,加转载 2013-01-08 11:26:04 · 3598 阅读 · 0 评论 -
Boost Thread学习笔记
thread自然是boost::thread库的主角,但thread类的实现总体上是比较简单的,前面已经说过,thread只是一个跨平台的线程封装库,其中按照所使用的编译选项的不同,分别决定使用Windows线程API还是pthread,或者Macintosh Carbon平台的thread实现。以下只讨论Windows,即使用BOOST_HAS_WINTHREADS的情况。thread类提供转载 2013-01-07 16:40:40 · 681 阅读 · 0 评论 -
Linux 编译安装Boost
linux平台下要编译安装除gcc和gcc-c++之外,还需要两个开发库:bzip2-devel 和python-devel,因此在安装前应该先保证这两个库已经安装:#yum install gcc gcc-c++ bzip2 bzip2-devel bzip2-libs python-devel -y然后是去官网下载源码包,地址下载,解压,按照如下步骤:#tar xvzf bo转载 2012-12-21 14:30:00 · 24023 阅读 · 0 评论 -
atoi 在 Unicode 模式下的应用
atoi的unicode版本是_wtoi()原创 2007-11-23 16:07:00 · 12870 阅读 · 2 评论 -
根据经纬度坐标计算实际距离
double hypot(double x, double y) ...{ return sqrt(x * x + y * y);}double distance(double wd1, double jd1, double wd2, double jd2) ...{// 根据经纬度坐标计算实际距离 double x, y, out; double P转载 2007-11-23 16:13:00 · 7606 阅读 · 0 评论 -
关于赋值表达式中出现 "/" 的问题
先看如下的语句:string s="a//a";coutsendl;cout"The length is "s.length()endl;运行结果如下:aaThe length is 3下面说明在 MFC中通过 Edit- BOX 进行取值的情况。(1) 建立一基于对话框的程序,其上放置一 Edit_box, 成员变量 为 m_edit,(2) 程序运行后,在 m原创 2007-10-24 10:23:00 · 723 阅读 · 0 评论 -
Regular Expressions in C++ with Boost.Regex(2)
MatchingAs I said earlier, a string matches a regular expression if the entire string satisfies the expression. Example 1 is a trivial program that accepts a regular expression and a string and te转载 2007-10-22 15:55:00 · 1037 阅读 · 0 评论 -
MFC 下文件对话框选择多个文件
在文件对话框下,选择多个文件,并且得到文件名,代码如下:CFileDialog Dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT); if(Dlg.DoModal()==IDOK) ...{ POSITION pos = Dlg.Get转载 2007-09-29 14:43:00 · 3655 阅读 · 0 评论 -
Boost::Regex Usage
转载 2007-10-18 11:42:00 · 1438 阅读 · 0 评论 -
C++ Performance Tips
Apr 5th, 2005 Introduction These tips are based mainly on ideas from the book Efficient C++ by Dov Bulka and David Mayhew. For a more thorough treatment of performance programmi转载 2007-10-23 10:02:00 · 790 阅读 · 0 评论 -
Regex++, Regular Expression Syntax.
(version 3.04, 18 April 2000) Copyright (c) 1998-2000Dr John Maddock Regular expression syntaxThis section covers the regular expression syntax used by this library, this is a programmers转载 2007-10-22 16:35:00 · 945 阅读 · 0 评论 -
Regular Expressions in C++ with Boost.Regex(4)
SearchingMatching and parsing a single string in its entirety does not address the important and ubiquitous use case of searching a string that contains a substring you want, but possibly a lot of转载 2007-10-22 16:00:00 · 1244 阅读 · 0 评论 -
Regular Expressions in C++ with Boost.Regex(1)
by Ryan Stephens 04/06/2006Searching and parsing text is messy business. What, at first, sounds like a simple matter of tokenizing a string and interpreting its structure quickly degenerates into a转载 2007-10-22 15:12:00 · 922 阅读 · 0 评论