摘要: 声明:本文源自 Danny Kalev 在 2011 年 6 月 21 日发表的《The Biggest Changes in C++11(and Why You Should Care)》一文,几乎所有内容都搬了过来,但不是全文照译,有困惑之处,请参详原文(http://www.softwarequalityconnection.com/2011/06/the-biggest-changes-in-c11-and-why-you-should-care/)。注:作者 Danny Kalev 曾是 C++ 标准委员会成员。Lambda 表达式Lambda 表达式的形式是这样的:[cpp]vie 阅读全文
posted @ 2012-06-06 12:02 jeffery_lush 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 《Thinking in C++》volume 2第五章有这么一句话:Member template functions cannot be declared virtual.Current compiler technology experts to be able to determine the size of a class’s virtual function table when the class is parsed.Allowing virtual member template functions woule require knowing all calls to such 阅读全文
posted @ 2012-05-07 13:45 jeffery_lush 阅读(1372) 评论(0) 推荐(0) 编辑
摘要: |字号订阅Google的一个开源项目google-perftools-2.0 ,网址:http://code.google.com/p/gperftools/网上全是拿去优化网络产品的介绍,没找到怎么用在自己的c++项目中。于是自己研究了下,发现挺好玩的。下载最新的源代码后解压,发现里面有makefile和vc2003的工程文件。手头有codeblocks+cygwin和vc2003、vc2010,就用2003先做测试吧。打开后发现有个libtcmalloc_minimal和一堆单元测试,libtcmalloc_minimal就是我想要的东东了。编译这个项目,没错误。发现是个动态库,把编译出的 阅读全文
posted @ 2012-04-20 17:11 jeffery_lush 阅读(1292) 评论(0) 推荐(1) 编辑
摘要: 首先头文件应继承CLLocationManagerDelegate.并:#import <CoreLocation/CoreLocation.h>响应事件中写如下代码:CLLocationManager *_locManager = [[CLLocationManager alloc] init];[_locManager setDelegate:self];[_locManager setDesiredAccuracy:kCLLocationAccuracyBest];[_locManager startUpdatingLocation];重载#pragma mark -#pra 阅读全文
posted @ 2012-04-19 17:11 jeffery_lush 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 对于实时传输(在这里实时传输主要指交互式视音频,例如视频会议,IM视音频对话等等)来说,数据量有以下两个特点:1.数据是即时产生的,并即时发送,如果数据不能在一个给定的期限内发送完毕,则这部分数据将被丢弃。2.一般来说,单位时间内传输的数据流量比较平滑。TCP依赖滑动窗口进行流量控制,滑动窗口大小是自适应的,影响滑动窗口主要有两个因素,一是网络延时,二是传输速率,滑动窗口的大小与延时成正比,与传输速率也成正比。在给定的网络环境下,延时可以认为是固定的,因此滑动窗口仅与传输速率有关,当传输实时数据时,因为数据流通量比较固定,所以这时TCP上的滑动窗口会处于一个不大不小的固定值,这个值大小恰好保证 阅读全文
posted @ 2012-04-18 17:42 jeffery_lush 阅读(938) 评论(0) 推荐(0) 编辑
摘要: 误区一,使用send函数发送数据一些人使用阻塞的send函数发送数据,这是绝对应该避免的,一旦某一个连接传输发生拥塞,或者突然中断而没有通知,调用send函数的线程将可能被阻塞很长一段时间(可能10秒或更长),尤其是当服务器同时处理成千上万个连接时,这种情况可能会频繁出现。使用非阻塞的send也不适合,数据不一定每次都能完全发送出去,你得使用select跟踪这些socket的发送状态(一旦可能,发送剩余数据),这失去了IOCP的优势。误区二,在多个工作线程的情况下使用PostQueuedCompletionStatus使用PostQueuedCompletionStatus向IOCP发送一个“ 阅读全文
posted @ 2012-04-18 17:36 jeffery_lush 阅读(654) 评论(0) 推荐(0) 编辑
摘要: 对每个使用AcceptEx接受的连接套结字使用setsockopt设置SO_UPDATE_ACCEPT_CONTEXT选项,这个选项原义是把listen套结字一些属性(包括socket内部接受/发送缓存大小等等)拷贝到新建立的套结字,却可以使后续的shutdown调用成功。/* SO_UPDATE_ACCEPT_CONTEXT is required for shutdown() to work fine*/setsockopt( sockClient,SOL_SOCKET,SO_UPDATE_ACCEPT_CONTEXT,(char*)&m_sockListen,sizeof(m_s 阅读全文
posted @ 2012-04-18 17:33 jeffery_lush 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 及时监测连接被动关闭除非有特别要求,否则你应该总是对每个连接保持一个挂起的接收pending io(使用WSARecv投递)。如果用户主动关闭连接,你的GetQueuedCompletionStatus调用将返回成功,但接收到的数据长度为0,你能根据这点检测连接是否已被对方关闭。如果连接被重置或者io被取消(如果你调用了CancelIo的话),GetQueuedCompletionStatus将返回失败,注意这时还应该判断GetQueuedCompletionStatus调用返回的lpOverlapped值,如果该值不为NULL,说明iocp已经检测到一个连接已经中断。安全的关闭连接很多人写的 阅读全文
posted @ 2012-04-18 17:33 jeffery_lush 阅读(912) 评论(0) 推荐(0) 编辑