随笔分类 -  C/C++

摘要:概述 TCP有一处和UDP不同的地方是TCP是面向连接的,TCP有建立连接、通信、关闭连接的操作,Boost.Asio提供了ip::tcp::acceptor用来接收新的TCP连接,底层由socket_acceptor_service提供连接服务, basic_socket_acceptor作为连接 阅读全文
posted @ 2019-02-21 14:42 Boblim 阅读(1175) 评论(0) 推荐(0)
摘要:同步方式: Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 头文件 名空间 ASIO库能够使用TCP、UDP、ICMP、串口来发送/接收数据,下面先介绍TCP协议的读写操作 对于读写方式,ASIO支持同步和异步两种方式,首先登场的是同步 阅读全文
posted @ 2019-02-21 11:55 Boblim 阅读(18062) 评论(2) 推荐(3)
摘要:转自:https://m.w3cschool.cn/nlzbw/nlzbw-3vs825ya.html Boost.Asio基本原理 这一章涵盖了使用Boost.Asio时必须知道的一些事情。我们也将深入研究比同步编程更复杂、更有乐趣的异步编程。 网络API 这一部分包含了当使用Boost.Asio 阅读全文
posted @ 2019-02-20 19:54 Boblim 阅读(20861) 评论(0) 推荐(2)
摘要:Boost.Asio 有两种支持多线程的方式,第一种方式比较简单:在多线程的场景下,每个线程都持有一个io_service,并且每个线程都调用各自的io_service的run()方法。 另一种支持多线程的方式:全局只分配一个io_service,并且让这个io_service在多个线程之间共享,每 阅读全文
posted @ 2019-02-19 17:01 Boblim 阅读(7647) 评论(0) 推荐(0)
摘要:IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象)。 asio::io_service io_service; asio::ip::tcp::socket socket(io_service 阅读全文
posted @ 2019-02-19 16:56 Boblim 阅读(13438) 评论(0) 推荐(1)
摘要:一、安装配置 1、简介 google 出的一个C++轻量级日志库,支持以下功能: ◆ 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为; ◆ 严重性分级,根据日志严重性分级记录日志; ◆ 可有条件地记录日志信息; ◆ 条件中止程序。丰富的条件判定宏,可预设程序终止条件; ◆ 异常信号处理。 阅读全文
posted @ 2019-02-19 14:54 Boblim 阅读(1457) 评论(0) 推荐(0)
摘要:转自:https://blog.csdn.net/qq849635649/article/details/52678822 我在工作中一直使用的是rapidjson库,这是我在工作中使用该库作的一些整理,以读写下面的这段json字符串为例来进行整理,该字符串覆盖了平时使用的布尔类型、整型、浮点类型、 阅读全文
posted @ 2019-01-29 17:25 Boblim 阅读(40151) 评论(2) 推荐(8)
摘要:三个用于并发编程的组件: atomic,thread,asio(用于同步和异步io操作) atomic atomic,封装了不同计算机硬件的底层操作原语,提供了跨平台的原子操作功能,解决并发竞争读写变量的困扰。包含头文件<boost/atomic.hpp>, atomic可以把对类型T的操作原子化, 阅读全文
posted @ 2019-01-29 17:19 Boblim 阅读(3060) 评论(0) 推荐(0)
摘要:功能描述:获取或设定资源使用限制。每种资源都有相关的软硬限制,软限制是内核强加给相应资源的限制值,硬限制是软限制的最大值。非授权调用进程只可以将其软限制指定为0~硬限制范围中的某个值,同时能不可逆转地降低其硬限制。授权进程可以任意改变其软硬限制。RLIM_INFINITY的值表示不对资源限制。 用法 阅读全文
posted @ 2019-01-28 16:26 Boblim 阅读(1397) 评论(0) 推荐(0)
摘要:简介 Google 的 gflags 是一套命令行参数处理的开源库。比 getopt 更方便,更功能强大,从 C++的库更好的支持 C++(如 C++的 string 类型)。包括 C++的版本和 python 的版本。 这里只针对 C++版本,python 版本的使用类似。主要内容参考与翻译自官方 阅读全文
posted @ 2019-01-28 15:45 Boblim 阅读(1745) 评论(0) 推荐(0)
摘要:我们使用STL编程的时候有时候会想到把一个流对象指向的内容用另一个流对象来输出,比如想把一个文件的内容输出到显示器上,我们可以用简单的两行代码就可以完成: 上面的代码就把infile流对象中的流重定向到标准输出cout上,您可以在屏幕上看到test.txt的内容。 下面的例子来自MSDN,清晰的描述 阅读全文
posted @ 2018-08-28 11:04 Boblim 阅读(4826) 评论(0) 推荐(0)
摘要:C++多线程编程中通常会对共享的数据进行写保护,以防止多线程在对共享数据成员进行读写时造成资源争抢导致程序出现未定义的行为。通常的做法是在修改共享数据成员的时候进行加锁--mutex。在使用锁的时候通常是在对共享数据进行修改之前进行lock操作,在写完之后再进行unlock操作,进场会出现由于疏忽导 阅读全文
posted @ 2018-08-27 14:52 Boblim 阅读(38018) 评论(2) 推荐(2)
摘要:简介 Google 的 gflags 是一套命令行参数处理的开源库。比 getopt 更方便,更功能强大,从 C++的库更好的支持 C++(如 C++的 string 类型)。 example 源代码先看 example 源代码,然后逐步介绍。 example.cc 1 2 3 4 5 6 7 8 阅读全文
posted @ 2018-08-27 11:51 Boblim 阅读(3998) 评论(0) 推荐(0)
摘要:最近发现自己对析构函数的认知有一定的问题,因为之前有在使用placement new时主动调用对象的析构函数,所以觉得析构函数只是个普通的成员函数,调用的时候只会执行自己方法体内的代码内容,而回收内存则是由于生命周期到了操作系统自动回收的。不过昨天突然在想,那如果是派生类的话,主动调用析构函数的话, 阅读全文
posted @ 2018-08-23 09:48 Boblim 阅读(6397) 评论(0) 推荐(0)
摘要:转自: https://www.cnblogs.com/llguanli/p/8732481.html Boost教程: http://zh.highscore.de/cpp/boost/ 本章目的: 当Android用ART虚拟机替代Dalvik的时候,为了表示和Dalvik彻底划清界限的决心,G 阅读全文
posted @ 2018-08-19 00:37 Boblim 阅读(3361) 评论(0) 推荐(1)
摘要:转发请注明出处:https://www.cnblogs.com/fnlingnzb-learner/p/9374732.html 最近在研究一些经常用到的东西想把它们做一个汇总,想了想用到最多的应该是排序算法,所以对排序算法做了个总结,并自己用C++实现了一下。 一、算法概述 0.1 算法分类 十种 阅读全文
posted @ 2018-07-26 22:00 Boblim 阅读(64725) 评论(6) 推荐(5)
摘要:一、序列式容器(数组式容器) 对于序列式容器(如vector,deque),序列式容器就是数组式容器,删除当前的iterator会使后面所有元素的iterator都失效。这是因为vetor,deque使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。所以不能使用erase(it 阅读全文
posted @ 2018-07-12 16:15 Boblim 阅读(28787) 评论(4) 推荐(10)
摘要:这两天被人问了一个问题说假如C/C++访问下表越界的数组元素会报错么,于是充满好奇心的我动手试了一下,WTF,果然没有报错,但是会给程序带来莫名其妙的结果(比如十次的循环但是变成了死循环,但八次却可以) 例: 程序结果: C语言的编译器是不检查下标越界的,以前知道这个问题,可是没有想过是什么原因? 阅读全文
posted @ 2018-07-10 02:28 Boblim 阅读(2965) 评论(0) 推荐(0)
摘要:以下参考了网上的一些资料并通过程序验证。 注意,以下情况都是用gcc和g++编译器得到的结果,用vs编译器又会有所不同。 以下说下c和c++中const定义的常量的一些区别: c++中用const定义了一个常量后,不会分配一个空间给它,而是将其写入符号表(symbol table),这使得它成为一个 阅读全文
posted @ 2018-07-09 11:27 Boblim 阅读(1790) 评论(0) 推荐(0)
摘要:最近被问到了C++内存池的问题,其中不免涉及到在指定内存地址调用对象构造函数以及显示调用对象析构函数的情况。 C++中new的用法 new是C++中用于动态内存分配的运算符,在C语言中一般使用malloc函数。 (1)plain new顾名思义就是普通的new,就是我们惯常使用的new。分配内存,调 阅读全文
posted @ 2018-07-08 02:14 Boblim 阅读(9891) 评论(0) 推荐(0)