
C++
chzuping
这个作者很懒,什么都没留下…
展开
-
C++中的new和delete
1. new与operator newC++中有很多语法让人难以理解,如:new operator(操作符,下同)和operator new之间差异,确切的说,应该是new与operator new 的区别。1.1 new operator如下代码:string *ps=new string("memory management");这里所使用的new就是所转载 2013-09-09 16:50:57 · 1455 阅读 · 0 评论 -
一种多线程基于计数无锁实现
先申明下,该方案为我在实际编程中创造出来的,事先我没有在其中地方看到关于该方案的介绍。 在多线程编程中,我们经常会遇到线程同步问题,这时候加锁就变得必不可少。但是锁的使用会或多或少带来某些性能上的下降。下面先介绍一个多线程编程中经常遇到的问题模型,然后实现一种无锁解决方案。 问题模型: R:表示某种资源,线程A往R中存放资源,线程B从R中取出资源。原创 2013-09-03 10:09:31 · 2515 阅读 · 6 评论 -
在Session 0中创建用户进程
在Windows XP, Windows Server 2003或者更早期的Windows操作系统中,所有的服务和应用程序都是运行在与第一个登录到控制台的用户得Session中。这个Session叫做Session 0。在Session 0 中一起运行服务和用户应用程序,由于服务是以高权限运行的,所以会造成一些安全风险。这些因素使得一些恶意代理利用这点,来寻找提升他们自身权限的结构。在Wi转载 2013-09-12 13:13:28 · 1901 阅读 · 0 评论 -
编程模仿boost::function和boost::bind
boost::function和boost::bind结合使用是非常强大的,他可以将成员函数和非成员函数绑定对一个对象上,实现了类似C#的委托机制。委托在许多时候可以替代C++里面的继承,实现对象解耦,简单说就是把产生事件的代码和处理事件的代码通过委托者给隔离开来。但是boost库是非常庞大的,尤其是在发布开源软件时,下载安装boost是一件让用户望而却步的事情。基于此,下面编程模拟boost::function和boost::bind。为了满足90%以上的应用场合,该代码实现以下目标:1.支持成员函原创 2013-09-12 14:03:49 · 1775 阅读 · 0 评论 -
VC++常用代码片段
1.改变当前目录到EXE所在的目录在VC++开发环境中直接运行程序,当前目录不是EXE所在的目录,这样会造成一些麻烦,比如使用相对路径打开文件。使用以下代码将当前目录设成EXE所在的目录:void ChangeCurDirToExe(){ CString strPath; ::GetModuleFileName(NULL,strPath.GetBuffer(MAX_PAT原创 2013-09-12 09:28:14 · 1585 阅读 · 1 评论 -
一种无锁CycleBuffer
利用我的前一篇文章介绍的多线程无锁解决方案,很容易实现一个支持一个线程读,一个线程写的CycleBuffer。需要特别注意的是该CycleBuffer要求缓冲区长度为2的n次方。下面贴出代码:class ZwAsynCount{public: ZwAsynCount(unsigned uSize) //uSize必须为2的n次方 { m_uReadCount = 0; m_uW原创 2013-09-05 13:52:48 · 1323 阅读 · 1 评论 -
windows平台使用CMake编译pcre库
网上有在windows平台编译pcre库的介绍,都是使用手动填加文件到工程的方式,过程比较繁琐。其实pcre本身提供了对使用CMake进行编译的支持,操作如下:下载安装CMake,进行如下配置:生成的文件目录如下:打开生动的PCRE.sln直接编译即可!原创 2013-11-25 10:55:13 · 2308 阅读 · 1 评论 -
socks代理服务器协议的说明
socks代理里面,有socks4 socks4a socks5,也有叫sock4 sock4a sock5的,都是一回事。socks4 socks4a和socks5的tcp部分极其简单。这又出现一个怪现象了,网文中除了一个人说道udp比tcp复杂,其他的全都说udp简单,只说tcp部分,把udp都一笔带过了。而我就明显感到udp比tcp复杂很多。 sock转载 2014-11-17 09:39:41 · 1337 阅读 · 0 评论