Boost
最爱吹吹风
觉悟
展开
-
boost.asio异步IO在各平台下的实现
basic_socket.hpp中将服务区分为了两种,一种是reactive_socket_service 一种是win_iocp_socket_service,这点跟操作系统类似,unix类系统和windows系统。因为unix上面的异步io用的都是reactor模式,windows的iocp是proactor模式,所以名称也是相对的。iocp不具体说了,只有windows平台下有,有极高的效率,因为io的工作基本系统都已经帮上层做了。参考basic_socket对具体平台的实现定义:#if原创 2020-11-16 20:55:21 · 685 阅读 · 0 评论 -
三种方法cmd输出重定向(推荐boost.process)
有些场景需要通过执行cmd命令,并且获取返回的结果。有三种方法:boost.process _popen windows1.boost.proeess#include "boost/process.hpp"#include "boost/process/windows.hpp"std::string GetCmdResult(std::string cmd){ namespace bp = boost::process; std::string strResult;...原创 2020-07-03 12:04:59 · 2857 阅读 · 0 评论 -
boost.asio网络错误码
对于网络编程,无论是底层socket编程还是上层网络库的编程,正常逻辑往往都非常的简单,重要的是对异常逻辑的把握。比如连接错误,往往都会有很多种。最近项目中用的长连接(TCP)就是基于boost.asio来做的,我们的windows、ios、android都用了这个作为底层网络库。在发生网络错误都会将错误码上报,各平台上报的错误码又不相同,所以深入asio内部查看了一下对于错误码的定义....原创 2019-12-16 10:52:33 · 1291 阅读 · 0 评论 -
boost.asio库编译使用
asio提供了很好的异步网络框架,即便不使用网络,仅仅使用他的异步IO也是很方便的。boost文档中对编译也有说明: b2 --with-system --with-thread --with-date_time --with-regex --with-serialization stage 上面是对asio依赖的一些模块进行了编译,如果不想依赖其他模块,直接使用as...原创 2019-10-25 16:51:02 · 1987 阅读 · 0 评论 -
boost.asio发送数据逻辑分析
The order of calls made to WSASend is also the order in which the buffers are transmitted to the transport layer. WSASend should not be called on the same stream-oriented socket concurrently from different threads, because some Winsock providers may split原创 2019-10-25 15:18:30 · 842 阅读 · 0 评论 -
boost.log库使用
boost库的包含头文件中已经#pragma comment将对应的lib文件链接,所以在VS工程中设置时就不需要列入引入lib项目。但是有一点需要注意的是boost并不知道当前的工程需要的是动态库还是静态库,所以要再与编译器中加入宏指明要引入的lib类型。默认是引入静态库,动态库需要指明BOOST_ALL_DYN_LINK简单初始化一下就可以使用:namespace attrs...原创 2019-02-22 16:03:09 · 450 阅读 · 0 评论 -
boost.log从编译到使用
最近新开项目,要用到log,虽然现在的log库不少。但是要为C++项目增加库还是首选boost。首先从boost.org上下载最新的boost,编译:bjam --with-log link=shared runtime-link=shared编译完成,发现生成了stage\lib目录下不仅有log库,还包含了其他一些库,这些都是log在运行中需要依赖的。将这些lib和dll全部cop...原创 2018-12-18 20:32:09 · 2220 阅读 · 0 评论 -
boost网络编程(2)
连接刚建立时,立即调用write_some写数据会不成功,对此我的解决办法是用async_write代替write_some函数,用async_write注册一个回调函数,检查write是否成功,不成功则再次调用async_write,这样循环知道写成功为止。 还需要注意的地方就是无论调用async_read还是async_write传递给的buffer参数一定要是new...原创 2013-12-25 11:55:13 · 654 阅读 · 0 评论 -
mac上编译boost
MAC上编译boost后在QT上使用时遇到两个问题,第一个是target版本不同 ,QT的版本是10.8,而boost编译出来的是10.12,因为我的mac刚升级到10.12.这样在连接boost时就报错。库的版本高于QT的要生成的APP的版本。第二个问题是链接libboost_filesystem.a时报错 :-1: error: symbol(s) not found for archit...原创 2017-03-23 17:11:18 · 1542 阅读 · 0 评论 -
boost linux下编译
http://www.cnblogs.com/skyofbitbit/p/3651446.html转载 2017-01-23 13:22:11 · 492 阅读 · 0 评论 -
boost::asio-网络部分框架探索
ASIO 网络相关部分类关系:最上层的类basic_io_object提供了对各平台异步io框架的封装(win_iocp, linux_reactive_epoll),屏蔽了平台上的细节对外部暴露了两个重要接口:1.get_service用于获取平台的服务(iocp,reactive的支持)2.get_implementation操作资源的集合(socket句柄,本地地址,远程地址...原创 2018-07-26 17:22:32 · 691 阅读 · 0 评论 -
boost::asio linux下的实现
看了下boost的源码, Windows下完全就是用IOCP来实现的异步,非常简洁,因为Windows为IOCP做的事情太多了,包括建立完成事件队列,往完成队列里面添加事件等等,根本不需要额外增加其他的代码就可以完成所有的事情。 而在linux下就没有这么方便,第一linux下的epoll是reactor模型,系统只是做简单的通知,其他拿数据的操作,还是需要自己动手,而且也不清楚是否有接...原创 2018-07-25 20:19:52 · 1253 阅读 · 0 评论