boost-asio
文章平均质量分 73
cd2108006026
WHAT
展开
-
一个简单的元编程例子
<br />在asio中有这么一段代码<br />template <typename Stream>char is_read_buffered_helper(buffered_stream<Stream>* s);template <typename Stream>char is_read_buffered_helper(buffered_read_stream<Stream>* s);struct is_read_buffered_big_type { char data[10]原创 2011-05-09 12:55:00 · 670 阅读 · 0 评论 -
asio: FOLLOWER-LEADER模式
<br />BOOST 的EPOLL封装,采用了所谓的领导者追随者模式。<br />我们知道EPOLL_WAIT是不能多线程调用的;<br />ASIO为了在LINUX下模拟PROACTOR模式,用应用层的数据结构模仿了WINDOWS系统给IOCP实现的完成包队列,<br />以及IO请求包;<br />为了模拟IOCP多个工作者线程调用GETQUEUEDCOMPLETEDSTATUS,<br />由于无法并发EPOLL_WAIT,采用了领导追随模式,做了个大概的模拟。<br /><br />怎么给人的感觉原创 2011-05-19 14:14:00 · 1216 阅读 · 1 评论 -
ascent的网络模块简析
ascent 2010的网络模块代码采用了IOCP,代码量很小。带着以下问题溜了一遍:1.IOCP的乱序问题如果同时对一个socket投递多个recv或者send请求,那么应用层会将TCP辛辛苦苦保证的有序给打乱。解决办法很简单,串行投递。这对于服务器程序来说是可行的,毕竟它管理的是成百上千个sockets,每个2请求,那IOCP要处理的也很多了。ascent也是这么做的(从socket类只含有两个overlap对象一眼看出)。但不是强制:发生了重复投递,它只是写了一条错误日志。2. send操作能否避开锁原创 2011-04-22 19:12:00 · 722 阅读 · 0 评论 -
boost::any实现
在用C++编写coroutine基础类的时候,需要参数的传递。而基础类对参数类型一无所知,毕竟参数是与应用相关的。此时,boost::any就派上用场了。编写此类的时候并没有参考boost::any代码(因此功能肯定不如boost::any完善严谨),写完后做了一下参考,将命名向boost看齐1. 先思考一下Any的用法:Any obj;obj = 5;原创 2012-05-20 15:47:40 · 1280 阅读 · 0 评论 -
boost enable_if——SFINAE(匹配失败不是错误)
让我们看下这段程序:很简单的一个重载;如我所愿,程序正常运行结果如下:void func(int)void func(T) [with T = Test]现在,取消最后一行的注释,再次编译。。。出现了如下编译错误:test0.cc: In function ‘void func(T) [with T = short i原创 2012-09-20 14:07:23 · 2618 阅读 · 0 评论 -
计数智能指针要点(shared_ptr)
引言: 与java等众多支持GC的现代语言不同,C/C++将更多的内存控制权交给程序员,在保证效率的同时,也给了很多犯错的机会。常见的内存泄露、重复释放等等。智能指针大大减少了犯错的机会,简化代码,提高可维护性。常用的智能指针有scope_ptr(c++ 11 unique_ptr),利用RAII特性,保证资源在作用域失效的时候被释放,也保证异常抛出时栈回滚原创 2012-09-14 09:06:23 · 2589 阅读 · 0 评论