- 博客(36)
- 资源 (3)
- 收藏
- 关注
转载 5G基站 — CU和DU分离
CU的全称是Centralized Unit,顾名思义就是集中单元;DU的全称是Distributed Unit,含义自然就是分布单元了。坦白说,CU和DU这两个名称是云里雾里,除了集中和分布这两个含义之外,没有提供更多的信息。 为什么CU和DU要分离? CU和CU分离了到底有什么好处? 现在开始部署的5G基站都是基于CU和DU分离架构的吗? 01 — 为什么CU和DU要分离? 我们先来看看4G和5G无线接入网部分的架构有什么不同:...
2021-12-10 10:43:42 9277
原创 HT1621驱动原理详解
介绍码屏的一般结构、原理、驱动方法和使用HT1621驱动段码屏的方法。一、 段码屏的显示原理和驱动方法一般段码屏有段电极和公共极,就像在图 2中,SEG1~SEG5为段电极,COM为公共极。段码屏中的每个段,都填充了一种特殊的液态晶体。在电场的作用下,晶体的排列方向会发生扭转,因而改变其透光性,从而可以看到显示的内容。一般电场电压就加在段电极和公共极的两端。但...
2019-06-03 16:11:01 23161 13
转载 C++ 多态详解
前几天在网上看到这样的一个问题:多态现在一般的用法,就是拿一个父类的指针去调用子类中被重写的方法。但我搞不懂为什么要那么做,我们直接在子类中写一个同名的成员函数,从而隐藏父类的函数不就行了么?然后有人这样回答:将父类比喻为电脑的外设接口,子类比喻为外设,现在我有移动硬盘、U盘以及MP3,它们3个都是可以作为存储但是也各不相同。如果我在写驱动的时候,我用个父类表示外设接口,然后在子类中重...
2019-03-05 16:09:22 331
转载 C++11的原子量与内存序浅析
C++11的原子量与内存序浅析一、多线程下共享变量的问题在多线程编程中经常需要在不同线程之间共享一些变量,然而对于共享变量操作却经常造成一些莫名奇妙的错误,除非老老实实加锁对访问保护,否则经常出现一些(看起来)匪夷所思的情况。比如下面便是两种比较“喜闻乐见”的情况。(a) i++问题在多线程编程中,最常拿来举例的问题便是著名的i++ 问题,即:多个线程对同一个共享变量i执行i++ ...
2019-03-05 16:05:57 311
转载 利用C++11原子量atomic实现自旋锁详解
一、自旋锁自旋锁是一种基础的同步原语,用于保障对共享数据的互斥访问。与互斥锁的相比,在获取锁失败的时候不会使得线程阻塞而是一直自旋尝试获取锁。当线程等待自旋锁的时候,CPU不能做其他事情,而是一直处于轮询忙等的状态。自旋锁主要适用于被持有时间短,线程不希望在重新调度上花过多时间的情况。实际上许多其他类型的锁在底层使用了自旋锁实现,例如多数互斥锁在试图获取锁的时候会先自旋一小段时间,然后才会休眠...
2018-12-18 15:48:54 3588
转载 C++11 CAS无锁函数compare_exchange_weak的使用
对compare_exchange_weak这个C++11用来实现CAS无锁算法函数的理解。可以先看一下cplusplus给出的用这个函数实现无锁链表的例子:// atomic::compare_exchange_weak example:#include <iostream> // std::cout#include <atomic> ...
2018-12-18 15:42:28 9129 3
转载 C++ 11 Lambda表达式
C++ 11 Lambda表达式C++11的一大亮点就是引入了Lambda表达式。利用Lambda表达式,可以方便的定义和创建匿名函数。对于C++这门语言来说来说,“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥,但很多高级语言在很早以前就已经提供了Lambda表达式的功能,如C#,Python等。今天,我们就来简单介绍一下C++中Lambda表达式的简单使用。声明Lambda...
2018-12-06 16:14:00 126
转载 无锁同步-C++11之Atomic和CAS;如何理解C ++ 11中的std :: atomic :: compare_exchange_weak
1、概要 本文是无锁同步系列文章的第一篇,主要探讨C++11中的Atomic。 我们知道在C++11中引入了mutex和方便优雅的lock_guard。但是有时候我们想要的是性能更高的无锁实现,下面我们来讨论C++11中新增的原子操作类Atomic,我们可以利用它巧妙地实现无锁同步。2、传统的线程同步 #include <thread>#i...
2018-12-05 16:35:14 5039 1
转载 理解WebSocket心跳及重连机制(五)
在使用websocket的过程中,有时候会遇到网络断开的情况,但是在网络断开的时候服务器端并没有触发onclose的事件。这样会有:服务器会继续向客户端发送多余的链接,并且这些数据还会丢失。所以就需要一种机制来检测客户端和服务端是否处于正常的链接状态。因此就有了websocket的心跳了。还有心跳,说明还活着,没有心跳说明已经挂掉了。1. 为什么叫心跳包呢?它就像心跳一样每隔固定的时间发一次...
2018-11-02 15:46:24 712
转载 WebSocket原理与实践(四)--生成数据帧
从服务器发往客户端的数据也是同样的数据帧,但是从服务器发送到客户端的数据帧不需要掩码的。我们自己需要去生成数据帧,解析数据帧的时候我们需要分片。消息分片: 有时候数据需要分成多个数据包发送,需要使用到分片,也就是说多个数据帧来传输一个数据。比如将大数据分成多个数据包传输,分片的目的是允许发送未知长度的消息。这样做的好处是: 1. 大数据的传输可以分片传输,不用考虑到数据大小导致的长度...
2018-11-02 15:44:54 232
转载 WebSocket原理与实践(三)--解析数据帧
1-1 理解数据帧的含义: 在WebSocket协议中,数据是通过帧序列来传输的。为了数据安全原因,客户端必须掩码(mask)它发送到服务器的所有帧,当它收到一个没有掩码的帧时,服务器必须关闭连接。不过服务器端给客户端发送的所有帧都不是掩码的,如果客户端检测到掩码的帧时,也一样必须关闭连接。当帧被关闭的时候,可能发送状态码1002(协议错误)。基本帧协议如下: 0 ...
2018-11-02 15:43:08 667
转载 WebSocket原理与实践(二)---WebSocket协议
WebSocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信问题而设计的。协议定义ws和wss协议,分别为普通请求和基于SSL的安全传输, ws端口是80,wss的端口为443.WebSocket协议由两部分组成,握手和数据传输。2-1 握手WS的握手使用HTTP来实现的。客户端的握手消息是一个普通的,带有Upgrade头的,HTTP Request的消息。先来看看如...
2018-11-02 15:41:52 235
转载 WebSockets通信
1. websocket是什么?WebSocket是一种网络通信协议。2. 为什么需要websocket?我们有http协议,为什么还需要websocket协议呢?因为http协议有一个缺陷,通信只能是客户端发起请求的,服务器端返回查询结果。比如说 我想知道一个实时新闻,那么每次新闻更新后,我都要刷新页面,发起客户端请求,服务器端返回结果。不能做到服务器端推送消息给客户端,当然我们可以使用...
2018-11-02 15:38:02 7503 1
转载 WebSocket原理与实践(一)---基本原理
一:为什么要使用WebSocket?1. 了解现有的HTTP的架构模式:Http是客户端/服务器模式中请求-响应所用的协议,在这种模式中,客户端(一般是web浏览器)向服务器提交HTTP请求,服务器响应请求的资源(例如HTML页面)和关于页面的附加信息。1-1. HTTP的特点是:HTTP是半双工协议,也就是说,在同一时刻流量只能单向流动,客户端向服务器发送请求(单向的),然后服务器响应...
2018-11-02 15:35:12 165
转载 WebSocket协议解析
一、协议简介WebSocket protocol 是HTML5一种新的协议,它是实现了浏览器与服务器全双工通信,本文主要介绍WebSocket协议格式。WebSocket通信过程分为两步:握手请求和数据传输。二、握手请求1、客户端在连接请求时候发送的内容GET / HTTP/1.1Connection:UpgradeHost:127.0.0.1:8088Origin:nu...
2018-11-02 15:32:26 364
转载 weak_ptr这个智能指针有什么用?
转自: https://segmentfault.com/q/1010000004078858c++primer:通过使用weak_ptr,不会影响一个给定的strblob所指向的vector的生存期。但是,可以阻止用户访问一个不再存在的vector的企图。书上说的作用就这一个,我想不通的是,阻止用户访问一个不再存在的vector,难道就不能通过检测strblob的shared_p...
2018-10-19 15:57:52 2417
转载 C++ 11 创建和使用共享 weak_ptr
1、为什么需要weak_ptr?在正式介绍weak_ptr之前,我们先来回忆一下shared_ptr的一些知识。我们知道shared_ptr是采用引用计数的智能指针,多个shared_ptr实例可以指向同一个动态对象,并维护了一个共享的引用计数器。对于引用计数法实现的计数,总是避免不了循环引用(或环形引用)的问题,shared_ptr也不例外。我们先来看看下面这个例子:#include...
2018-10-19 15:25:02 160
转载 Shared_from_this 几个值得注意的地方
shared_from_this()是enable_shared_from_this<T>的成员 函数,返回shared_ptr<T>。首先需要注意的是,这个函数仅在shared_ptr<T>的构造函数被调用之后才能使 用。原因是enable_shared_from_this::weak_ptr并不在构造函数中设置,而是在shared_ptr<T>的...
2018-10-19 14:28:50 230
转载 信号量 互斥锁 条件变量的区别
信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是说,信号量不一...
2018-10-17 16:56:21 205
转载 我用C++的理由——关于C和C++的选择
摘自:http://www.xue163.com/32/6/325715.html,作者:王可。整理的很好!首先,我不会使用Java或C#,能力上不会,主观上也不会,因为两点原因:1,他们都属于解释型的语言,这有很多问题是我无法容忍的,程序的速度和封装的安全性;2,他们都不够底层,没有指针,却加载了内存管理器,对我来说这些都是麻烦和束缚,对我而言他们都不是足够自由的语言。或者说,我无法接受他...
2018-10-09 15:22:07 532
转载 C++11(及现代C++风格)和快速迭代式开发
过去的一年我在微软亚洲研究院做输入法,我们的产品叫“英库拼音输入法” (下载Beta版),如果你用过“英库词典”(现已更名为必应词典),应该知道“英库”这个名字(实际上我们的核心开发团队也有很大一部分来源于英库团队的老成员)。整个项目是微软亚洲研究院的自然语言处理组、互联网搜索与挖掘组和我们创新工程中心,以及微软中国Office商务软件部(MODC)多组合作的结果。至于我们的输入法有哪些创新的fe...
2018-10-09 15:19:19 234
原创 C++中的RAII介绍
C++中的RAII介绍摘要RAII技术被认为是C++中管理资源的最佳方法,进一步引申,使用RAII技术也可以实现安全、简洁的状态管理,编写出优雅的异常安全的代码。资源管理RAII是C++的发明者Bjarne Stroustrup提出的概念,RAII全称是“Resource Acquisition is Initialization”,直译过来是“资源获取即初始化”,也就是说在构造函...
2018-10-09 15:17:03 240
转载 C++ foreach & boost::lexical_cast
C++ foreach考虑下面的需求,对vector<int>中的每个元素加1,如何做? void add(int& lhs) // 注意:要修改主调方法中的数据,这里要使用引用{ lhs= lhs + 1;}int intArray[] = {1,2,3,4,5};vector<int> intVector(intArray,intAr...
2018-08-31 17:27:59 160
转载 c++ std::bind 详解及参数解析
// Bind_std_function.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <functional>#include <random>#include <memory>//学习bind的用法void f(int n1, int n...
2018-08-30 15:39:06 3853
转载 c++ Lambda函数
或许,Lambda 表达式算得上是 C++ 11 新增特性中最激动人心的一个。这个全新的特性听起来很深奥,但却是很多其他语言早已提供(比如 C#)或者即将提供(比如 Java)的。简而言之,Lambda 表达式就是用于创建匿名函数的。GCC 4.5.x 和 Microsoft Visual Studio 早已提供了对 lambda 表达式的支持。在 GCC 4.7 中,默认是不开启 C++ 11 ...
2018-08-15 17:31:01 874
转载 c++仿函数 functor
内容整理自国外C++教材 先考虑一个简单的例子:假设有一个vector<string>,你的任务是统计长度小于5的string的个数,如果使用count_if函数的话,你的代码可能长成这样:1 bool LengthIsLessThanFive(const string& str) {2 return str.length()<5; 3 }...
2018-08-15 15:33:03 136
转载 linux下的缓存机制及清理buffer/cache/swap的方法
转自: linux下的缓存机制及清理buffer/cache/swap的方法梳理一、缓存机制介绍在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。缓存机制优点:减少系统调用次数,降低CPU上下文切换和磁盘访问频率。CPU上下...
2018-07-30 17:02:00 469
转载 C# 简单软件有效期注册的实现
◆需求:公司一直以来对开发的产品都没有进行使用时间的控制,要么就是将日期限制写死在程序里面,每次都要编译新程序再发给客户,很不方便。于是公司让我写个模块,要求如下:1、无论哪个新开发的程序只要调用这个模块就可以控制有效期2、软件到期后需要我们提供有效的注册码软件才能继续使用3、客户修改了电脑的时间或者将软件移动到其他电脑依然可以控制4、如果用注册表的方式,不允许当客户知道注册表...
2018-07-18 16:47:41 5175
转载 c++智能指针
c++智能指针1.应用与原理 智能指针和普通指针的区别在于智能指针实际上是对普通指针加了一层封装机制,这样的一层封装机制的目的是为了使得智能指针可以方便的管理一个对象的生命期。c++通过new和delete来处理动态内存的申请和释放,但是new之后处理不好delete便会导致内存泄漏。但是智能指针的删除是智能指针本身决定的,用户不需要管理释放。 智能指针的封装是一个模板,所以使用的方式是sha...
2018-07-10 16:14:05 194
原创 linux中samba访问软连接文件和目录的方法
linux下创建连接命令:软连接: ln -s 源文件/源目录 目标文件/目标目录 (在目标位置上生成一个文件/目录的镜像,不会占用磁盘空间)硬连接: ln 源文件/源目录 目标文件/目标目录 (在目标位置上生成一个和源文件大小相同的文件)无论是软链接还是硬链接,文件都保持同步变化。解决samba 无法访问软连接的问题:在配置文件的“[global]”节的最后,加上下面三条设置:follo...
2018-07-10 15:40:20 6225
转载 C++ explicit关键字详解
首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用explicit关键字的类声明, 即默认...
2018-07-10 14:50:23 393
原创 C++智能指针原理
在C++11中,引入了智能指针。主要有:unique_ptr, shared_ptr, weak_ptr。这3种指针组件就是采用了boost里的智能指针方案。很多有用过boost智能指针的朋友,很容易地就能发现它们之间的关系:stdboost功能说明unique_ptrscoped_ptr独占指针对象,并保证指针所指对象生命周期与其一致shared_ptrshared_ptr可共享指针对象,可以赋...
2018-07-10 14:48:07 1310
原创 BCB中使用sqlite3
就直接从sqlite3的官网https://www.sqlite.org/download.html下载最新版本的源码sqlite-amalgamation-3240000.zip里面几个文件:shell.c sqlite3.c sqlite3.h sqlite3ext.hc++builder的项目中在菜单: 工程->添加到工程吧 sqlite3.c添加进去uint1.cpp中包含h文...
2018-07-05 20:42:41 1415
转载 Windows下如何在当前目录下,打开cmd命令窗口
方法一:在当前目录下,按下shift + 鼠标右键,会出现“在此处打开命令窗口”的字样,然后点击即可。方法二:在该文件夹上,按下shift + 鼠标右键,会出现“在此处打开命令窗口”的字样,然后点击即可。...
2018-07-05 20:19:02 1681
转载 CentOS安装GCC-4.8.5
1. 下载gcc-4.8.5 源码包wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz12. 解压源码包tar xvf gcc-4.8.5.tar.gz 13. 下载依赖库。cd gcc-4.8.5/ cd contrib/ ./download_prerequisites 123这个脚本用来下载和安装三个依赖库,如果服务...
2018-07-05 19:58:34 3521
原创 Centos6.5 安装 gcc4.7
搞项目时,在linux下编译提示出错:unrecognized command line option "-std=c++11"查的gcc 版本是centos 6.5的默认版本 gcc 4.4.7, 很显然版本太低,不支持c++ 11。(大部分不支持。GCC 4.8.1才完全支持的C++11) Centos 6.5 自带的 gcc 版本是 4.4.7,安装 gcc4.7,步骤如下: w...
2018-07-05 19:41:41 711
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人