随笔分类 -  boost

boost c++
(原创)拨开迷雾见月明-剖析asio中的proactor模式(二)
摘要:在上一篇博文中我们提到异步请求是从上层开始,一层一层转发到最下面的服务层的对象win_iocp_socket_service,由它将请求转发到操作系统(调用windows api),操作系统处理完异步请求之后又是如何返回给应用程序的呢,这里是通过iocp(完成端口)来实现的。让我们先来简要的看看... 阅读全文

posted @ 2014-07-13 13:24 qicosmos(江南) 阅读(2466) 评论(0) 推荐(1) 编辑

(原创)拨开迷雾见月明-剖析asio中的proactor模式(一)
摘要:使用asio之前要先对它的设计思想有所了解,了解设计思想将有助于我们理解和应用asio。asio是基于proactor模式的,asio的proactor模式隐藏于大量的细节当中,要找到它的踪迹,往往有种只见树木不见森林之感,笔者将剖析asio中的proactor模式,一步一步揭开它的面纱,最终拨... 阅读全文

posted @ 2014-07-10 22:50 qicosmos(江南) 阅读(3865) 评论(0) 推荐(3) 编辑

c++11实现c++14的optional
摘要:c++14中将包含一个std::optional类,它的功能和用法和boost的optional类似。optional内部存储空间可能存储了T类型的值也可能没有存储T类型的值,只有当optional被T初始化之后,这个optional才是有效的,否则是无效的,它实现了未初始化的概念。optional的应用场景函数返回无效对象 有时根据某个条件去查找对象时,如果查找不到对象时就会返回一个无效值,这不表明函数执行失败,而是表明函数正确执行了,但是结果却不是有用的值,这时就可以返回一个未初始化的optional对象出去,在外面判断这个optional对象是否有效对象是否被初始化,如果没有被初始... 阅读全文

posted @ 2014-03-02 22:37 qicosmos(江南) 阅读(12892) 评论(2) 推荐(3) 编辑

(原创)用c++11打造好用的variant(更新)
摘要:关于variant的实现参考我前面的博文,不过这第一个版本还不够完善,主要有这几个问题:内部的缓冲区是原始的char[],没有考虑内存对齐;没有visit功能。没有考虑赋值构造函数的问题,存在隐患。 这次将解决以上问题,还将进一步增强variant的功能。增加的功能有:通过索引位置获取类型。通... 阅读全文

posted @ 2014-02-21 14:44 qicosmos(江南) 阅读(12537) 评论(2) 推荐(4) 编辑

(原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
摘要:boost.property_tree可以用来解析xml和json文件,我主要用它来解析xml文件,它内部封装了号称最快的xml解析器rapid_xml,其解析效率还是很好的。但是在使用过程中却发现各种不好用,归纳一下不好用的地方有这些:获取不存在的节点时就抛出异常获取属性值时,要排除属性和注释... 阅读全文

posted @ 2014-02-19 12:36 qicosmos(江南) 阅读(14276) 评论(1) 推荐(4) 编辑

(原创)谈谈boost.asio的异步发送
摘要:在上一篇博文中提到asio的异步发送稍微复杂一点,有必要单独拿出来说说。asio异步发送复杂的地方在于: 不能连续调用异步发送接口async_write,因为async_write内部是不断调用async_write_some,直到所有的数据发送完成为止。由于async_write调用之后就直接返回了,如果第一次调用async_write发送一个较大的包时,马上又再调用async_write发送一个很小的包时,有可能这时第一次的async_write还在循环调用async_write_some发送,而第二次的async_write要发送的数据很小,一下子就发出去了,这使得第一次发送的数据和.. 阅读全文

posted @ 2013-12-23 11:44 qicosmos(江南) 阅读(15943) 评论(10) 推荐(6) 编辑

(原创)如何使用boost.asio写一个简单的通信程序(二)
摘要:先说下上一篇文章中提到的保持io_service::run不退出的简单办法。因为只要异步事件队列中有事件,io_service::run就会一直阻塞不退出,所以只要保证异步事件队列中一直有事件就行了,如何让异步事件队列中一直有事件呢?一个简单的办法就是循环发起异步读操作,如果对方一直都不发数据过来,则这个异步读事件就会一直在异步事件队列中,这样io_service::run就不会退出了。但是这样有一个缺点就是io_service::run处于阻塞会阻塞当前线程,如果不希望阻塞当前线程,就还是通过work来保持io_service::run不退出。 现在言归正传,看看如何用asio写一个简... 阅读全文

posted @ 2013-12-12 15:59 qicosmos(江南) 阅读(5679) 评论(5) 推荐(5) 编辑

(原创)如何使用boost.asio写一个简单的通信程序(一)
摘要:boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介绍如何写一个简单的通信程序来告诉读者如何使用asio,希望对asio的初学者有所帮助。由于只是介绍其基本用法,作为例子的简单示例并不考虑很多的业务逻辑和异常处理,只是介绍基本用法,让初学者入门。 使用asio容易出错的一个主要原因是因为它是基于proactor模式实现的,asio有很多异步操作接口,这些异步接口稍不注意就会出现莫名奇妙的错误,所以要用好asio的第一步是理解其异步操思想。异步... 阅读全文

posted @ 2013-12-06 11:45 qicosmos(江南) 阅读(11774) 评论(5) 推荐(9) 编辑

导航