- 博客(98)
- 资源 (4)
- 收藏
- 关注
原创 vs2015中以静态库链接ZeroMQ
windows下编译zeromq会出现两种类型的Lib:一个是动态链接时所要用的lib,因为不包含源码,因此很小,使用的时候需要将对应的dll放到与exe同级的目录下;另一个是静态库,包含源码,因此比较大,编译后不需要依赖dll。这两个库的名字目前(20190708)如下:1,libzmq-v140-mt-gd-4_3_2.lib (动态)2,libzmq-v140-mt-sgd-4_3...
2019-07-08 17:44:59
1128
原创 c++类成员函数作回调
C++类的成员函数作回调函数,主要分三种情况:1,类的static函数,由于此类函数属于类而非类的实例,不存在this指针的概念,因此可以直接取其函数地址作为回调;2,类的普通成员函数,这类函数在实现上存在着隐含的this指针,因此作为回调必须指明是哪一个类实例的函数。3,类的virtual函数,由于存在多态,如果将其作为回调函数,其逻辑上可能会比较复杂,个人觉得应该尽量避免。以下是C++...
2018-12-17 14:52:04
4127
1
转载 C/C++内存泄漏及检测
转载自:https://www.cnblogs.com/skynet/archive/2011/02/20/1959162.html **原作者:吴秦 **出处:http://www.cnblogs.com/skynet/“该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,...
2018-11-19 16:40:09
487
原创 epoll实现原理
epoll的使用epoll只有以下的三个系统函数调用: epoll_create,epoll_ctl和epoll_wait:int epoll_create(int size);其中参数:(1)size指明了生成描述符的最大范围;该函数返回一个epoll专用的描述符(fd)int epoll_ctl(int epfd,int op, int fd, struct epoll_event ...
2018-11-19 13:24:32
1284
转载 C++纯虚函数定义
看代码时时无意看到代码里某类的纯虚函数居然有实现,吓我一跳,果真学无止境啊!在此转载相关文章一篇,以便遗忘:https://blog.csdn.net/happymawolf/article/details/6369585今天,我读到《effective c++》的第34条款,里面竟然提到纯虚函数也是可以定义的,大吃一惊,赶快打开vs2005,自己编写了一段代码,编译运行,发现竟然真的可以!...
2018-10-11 14:15:02
5899
6
原创 C/C++11 const
    关于const,在前面关于《C/C++程序内存分布》已经又提到过。但是,这里一定要指出的是现在的C++的const实现和C的const是不一样的。     比如对于如下的程序,以下程序对于C语言来说是不合法的,但是对于C++却毫无问题。#include <stdio.
2018-09-05 17:02:41
415
原创 C/C++程序内存分布
1,主要段及其分布    每个程序运行起来以后,它将拥有自己独立的虚拟地址空间。这个虚拟地址空间的大小与操作系统的位数有关系。例如32位硬件平台的虚拟地址空间的地址可以从0~2^32-1,即0x00000000~0xFFFFFFFF,总共4GB大小。在32位Windows操作系统中,高地址的2GB位内核空间,用户空间只有2GB,而32位Linux的内核空...
2018-09-05 16:56:19
5924
1
原创 C++智能指针
    C/C++中的堆内存的释放是由程序员自己控制的,但是在某些时候,这些内存的释放时机无法被准确或难以判断出来。智能指针此时应运而生。事实上,有些时候堆内存的释放即使可以被准确判断出来,但是由于编码上的困难或繁琐,也会采用智能指针。1,C++智能指针的实现原理(简)    C++ 的智能指针
2018-08-30 15:13:27
714
原创 C++右值引用
class A{public: A() { std::cout << "Constructor" << std::endl; } A(const A& src) { std::cout << "Copy Constructo
2018-08-23 11:46:35
410
原创 Qt多线程
1 开启线程 QThread类提供了一个平台无关的方式来管理线程。 实际上由于Qt信号槽机制的原因,本人觉得Qt的多线程对新手而言存在很多坑。 Qt中关于线程的类为QThread。只要继承该类,并实现run()方法就可以在主线程中方便的启动新线程,启动函数为QThread.start()。然而,自定义的run()内并没有自动实现Qt的消息循环(当然它也不应该有),因此即便在新线程内连接了信号和...
2018-08-21 17:24:04
3319
原创 C++重载+运算符
C++重载运算符由两种方法: 1,直接将运算符函数重载为类内成员函数 2,将运算符函数重载为类的友元函数 以下为operator+的运算符函数,并且两种方法都可以实现连+;#include "stdafx.h"#include <iostream>#include <string>using namespace std;class Op{publi...
2018-08-21 16:04:43
616
原创 C++返回对象
C/C++函数在返回值类型的尺寸太大时,在函数返回时会使用一个临时的栈上内存区域作为中转。结果返回值对象会被拷贝两次!其具体的返回实现在不同编译器下的实现时不一样的。 因此,在C++中返回对象的时候,对象需要经过2次拷贝构造函数的调用才能够完成返回对象的传递。一次拷贝到栈上的临时对象里,另一次把临时对象拷贝到存储返回值的对象里。在某些编译器里,返回一个对象甚至需要经过更多的步骤。 因此,尽量不...
2018-08-17 14:29:26
1992
原创 DLL 导出类时DLL HELL错误及其解决方案
DLL除了可以导出函数之外,还可以导出类。 然而,导出类的DLL在维护和修改时有很多地方必需很小心,增加成员变量、修改导出类的基类等操作都可能导致意想不到的后果。当用户更新了最新版本的DLL库后,应用程序可能再也不能工作了。这就是DLL Hell问题。 如导出如下类Class A{public: int get_a();private: int a;}当需要再新...
2018-08-17 10:33:41
482
转载 C++11 lambda 表达式解析
截取自:https://www.cnblogs.com/haippy/archive/2013/05/31/3111560.html C++11 的 lambda 表达式规范如下: [ capture ] ( params ) mutable exception attribute -&amp;gt; ret { body } (1) [ capture ] ( params ) -&amp;gt; re...
2018-08-14 16:19:26
258
原创 C/C++单例模式
非线程安全单例:线程安全单例: 1,懒汉式class Singleton{public: static Singleton* getInstance();private: Singleton(); //把复制构造函数和=操作符也设为私有,防止被复制 Singleton(const Singleton&amp;amp;); Singleton&amp;amp; ...
2018-08-14 14:41:46
4456
2
原创 QWebengine load crash的一种解决办法
显卡驱动不匹配或安装错误时,会影响 QWebengine的加载。我电脑就是在自动更新显卡驱动后,QWebengine 一直crash 解决办法:重新安装显卡驱动
2018-07-16 13:22:29
1709
原创 matplotlib.pyplot报错的一种解决方案
在用matplotlib.pyplot作图时报错(python3.6.4,) This application failed to start because it could not find or load the Qt platform plugin”windows”in.. Reinstalling the application may fix this problem. 解决方案...
2018-06-22 15:02:02
3450
原创 dll内获取自身路径的方法(windows)
include <windows.h> bool GetSelfModulePath(char* path){ MEMORY_BASIC_INFORMATION mbi; HMODULE dllHandle = ((::VirtualQuery(GetSelfModulePath, &mbi, sizeof(mbi)) != 0) ? (HMODULE)...
2018-04-19 10:47:30
2041
转载 开源协议汇总
协议名 主要内容 特殊现制 BSD 可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布 1.如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。...
2018-04-12 10:06:44
237
原创 QT学习笔记--Qt信号槽机制
1,parent参数基本上,Qt中所有直接或间接继承自QObject的类的构造函数都会指定一个parent参数,如下:#include <QObject>class MyTest : public QObject{ Q_OBJECTpublic: explicit MyTest(QObject *parent = 0);signals:publi...
2018-03-21 16:40:33
827
原创 LTE学习笔记--载波聚合
在现有的LTE中,单小区最大的带宽被限定在了20MHz,因此对于在该小区下的UE所能获得的最大的上下行速率也是被限制了的。为了使得UE能获得更大的上下行速率,可以将2个或更多的载波单元(CC,简单的可以认为就是小区)聚合在一起以获得更大的传输带宽(最大为100MHz)。 PCell(Primary Cell,主小区)是 UE 进行初始连接建立的小区,或进行 RRC 连接重建的小区,或是在 han...
2018-03-19 14:27:09
23296
原创 LTE学习笔记--LTE无线连接过程--切换
首先需要说明的是小区切换和重连并不是一个概念:小区切换时UE远离了小区,将测量信息发送给eNode B,由eNode B决定是否切换到临近的其他小区;而重连是因为某些原因导致UE与eNode B的连接断开,后由重新检测到小区信号因此发生重连。1,测量这里涉及到LTE测量的概念。测量过程主要包括以下三个步骤: 测量配置:由eNB通过RRCConnectionReconfigurtion消息...
2018-03-19 14:18:57
10857
1
原创 LTE学习笔记--LTE无线连接过程--UE Attach过程和Detach过程
UE想要获取服务,需要向网络注册,这个注册过程被称为Attach。Attach的过程建立了默认的EPS承载(承载可以简单的认为是核心网到UE之间的通路)。从而使UE/User保持“一直在线”的IP连接,并且PGW将激活预告定义好的相应于此默认EPS承载的策略与计费规则。当用户完成网路接入过程后,开始向网络进行注册。 当然UE的Attach也是有可能会被拒绝,这里需要分多种情况。 ①RR...
2018-03-19 14:12:55
10728
原创 LTE学习笔记--LTE无线连接过程--网络接入过程
1,检测系统信息广播系统信息广播由网络实现操作,周期性放入发送,UE开机后,会接收到由eNode B通过物理广播信道(PBCH)和物理性下行控制信道(PDCCH)发送的基站指示信息。包括本小区的物理随机接入信道(PRACH)配置索引、逻辑根序列初始值、循环移位索引、上下行配置索引等于随机接入有关的参数。 UE通过这些指示信息生成要发送给eNode B的随机接入前导序号。2,小区搜索过程...
2018-03-19 14:09:17
19860
1
原创 LTE学习笔记--RLC--综述
36.322 RLC层主要负责: 分段/串联和重组RLC SDU:UM和AM 通过ARQ来进行纠错:AM 对RLC data PDU进行重排序:UM和AM 复包检重测:UM和AM 对RLC data PDU进行重分段:AM...
2018-03-19 13:41:42
1168
原创 LTE学习笔记--MAC--MAC PDU
一个 MAC PDU 由 1 个 MAC 头(MAC header)+ 0 个或多个 MAC SDU + 0 个或多个 MAC CE(Control Element) + 可能存在的 padding 组成。MAC header 由一个或多个 MAC subheader 组成。每个 subheader 对应一个 MAC PDU,或一个MAC CE,或 padding。 The MAC head...
2018-03-16 11:12:09
10027
原创 LTE学习笔记--MAC--BSR
UE向 eNB发送SR时,只携带了是否有上行数据的信息,而并没有将所要传输上行数据的大小告知eNB。eNB只会分配一个固定大小的上行资源,UE在此资源上要么发送上行数据(上行资源太小足够),要么发送Buffer status Report(BSR)(上行资源不够)。?是否正确? 在高层UE根据业务的不同可以建立多个无限承载(Radio Bearer),没个Radio Bearer都是一个逻辑信道...
2018-03-16 11:09:21
4487
1
原创 LTE学习笔记--MAC--SR
UE是没有权利主动在PUSCH上发送数据的,只能通过PUCCH向eNB发送Scheduling Request(SR),eNB给UE分配上行资源后UE才可在PUSCH上发送数据。但在SR中并没有包含所要传输数据的大小,因此eNB要么分配一个足够大的资源(这显然不可能),要么分配一个大于Buffer Status Report(BSR)的资源,这样在分配资源比所要发送的数据包小时,只发送一个BSR,...
2018-03-16 11:01:55
4047
原创 LTE学习笔记--MAC--TTI bundling
在普通的传输中,一个TB会生成多个RV,然后在某个SF上发送RV#0,如果收到NACK会发送RV#1/2/3,这是Normal HARQ。在信号差的情况下,一个TB的发送可能得经过多次重传才能发送成功,这样会导致很高的延迟。如下图所示。 常见的一种解决办法是将RLC SDU分段,以RLC/MAC header作为高层的分包和组包依据,在连续的TTI内发送给对端。这种方法由于有header...
2018-03-16 10:26:40
3500
原创 LTE学习笔记--MAC--HARQ
LTE中存在两种级别的重传机制:MAC层的HARQ,以及RLC层的ARQ(AM模式)。其主要作用的是MAC层的HARQ,而RLC的ARQ是作为一种补充手段而存在的。 Ps: HARQ 机制的目标在于实现非常快速的重传,其反馈出错率大概在 1%左右。对于某些业务,如TCP 传输(要求丢包率小于10-6),HARQ 反馈的出错率显然过高了。对于这类业务, RLC 层的重传处理能进一步降低反馈出错率。...
2018-03-16 10:21:50
25614
1
原创 LTE学习笔记--MAC--综述
MAC实体在UE及eNodeB 上都存在,他主要处理如下传输信道: ——广播信道(BCH)——下行共享信道(DL-SCH)——呼叫信道(Paging CH,PCH)——上行共享信道(UL-SCH)——随机接入信道(RACH) 下图是L2上下行结构框图: 其实说白了MAC层就是实现了逻辑信道与传输信道之间的映射。 对于下行:复用从一条或多条逻辑信道下来的数据(MAC SDUs)到...
2018-03-16 09:46:05
1619
原创 LTE学习笔记--PHY--RSRP、RSRQ、RSSI和SINR
1,RSRPRSRP,Reference Singal Receiving Power,是指定测量频带上,承载小区专属参考信号的资源粒子的功率贡献(单位w)的线性平均值(协议规定RSRP指的是每RE的能量,但每个RE中都安插RS不可实现因此,只能算在RB中安插几个之后算均值),如下图所示。简单的可以认为RSRP就是每个subcarrier的功率。 2,RSSIRSSI,Refer...
2018-03-16 09:21:00
20317
1
原创 LTE学习笔记--PHY--Measurement Gap
当UE当前所在小区的信号质量低于一个阈值时,UE开始考虑小区切换,此时UE需要在保证当前连接的前提条件下测量临近小区的信号质量。这样UE就需要最少两个RF收发器。双RF收发器之间存在干扰,并且成本更高。LTE使用的解决方法是时分复用,即一个RF分成两种时段,一种时段用于处理当前连接,另一种时段负责测量临近小区。这样也存在一个很明显的问题就是UL会受到比较大的影响。因此,需要尽量避免开启这种时分复用...
2018-03-16 09:16:12
6954
原创 LTE学习笔记--PHY--CSI
CSI(Channel State Information)是 UE上报给eNodeB 的信道状态信息,由CQI(Channel Quality Indicator)、PMI(Precoding Matrix Indicator)、PTI(Precoding Type Indicator)和 RI(Rand Indication)组成,其所占的时频资源是由eNB 来控制的。...
2018-03-16 09:07:02
1324
原创 LTE学习笔记--PHY--TM模式
TM模式指的是不同的多天线传输方案。在不同的方案中,天线映射具有不同的特殊结构,解调时所使用的参考信号也不同,所依赖的CSI反馈类型也不同。 TM 1:单天线端口传输(使用 port 0),应用于单天线传输的场合。 TM 2:发射分集模式,适用于小区边缘信道情况比较复杂,干扰较大的情况,也可用于 UE 高速移动的情况。使用 2 或 4 天线端口。发射分集是默认的多天线传输模式。它通过在不同的天...
2018-03-16 09:06:00
4983
原创 LTE学习笔记--PHY--上行参考信号
LTE 在上行定义了 2 种类型的上行参考信号: 1,DeModulation Reference Signal(DMRS):DMRS 主要用于 eNodeB 对上行物理信道进行信道估计,以便正确地解调 PUCCH 和 PUSCH; 2,Sounding Reference Signal(SRS):SRS 主要用于上行信道质量估计以便 eNodeB 进行上行的频选调度。 SRS 还可用于估计上...
2018-03-15 17:42:13
9159
1
原创 LTE学习笔记--PHY--PRACH
物理层的RA preamble结构如下图所示,包含TCPTCPT_{CP}和TSEQTSEQT_{SEQ}两个部分。 根据CP和SEQ的长度和,preamble可以分成如下四种格式: 如果是由MAC层触发的RA,preamble的传输将被限定在一个确定的时频资源集合上发送。此特定PRACH资源集合配置在SIB2中。如下 其中PRACH-ConfigIndex查表可指明...
2018-03-09 16:39:24
7041
原创 LTE学习笔记--PHY--PUCCH
PUCCH主要用于传输上行 L1/L2 控制信息以支持上下行数据传输(UCI Uplink Control Information)。主要的控制信息包括: 1, SR(Scheduling Request),用于向eNB请求上行UL-SCH资源; 2, HARQ ACK/NACK,对在PDSCH上发送的下行数据进行HARQ确认; 3, CSI(Channel State Informa...
2018-03-09 16:03:02
8347
原创 LTE学习笔记--PHY--PUSCH
PUSCH主要用于传输UL-SCH上行数据。UE并没有主动发送PUSCH上行数据的权利,而是需要经过eNB的允许(具体参见Schedulering Request相关章节)。当UE需要发送上行PUSCH数据时,向eNB发起SR请求(在PUCCH上传输),eNB接收到请求后给UE分配上行资源后,通过PDCCH下发给UE。UE解出PDCCH后,发现PDCCH携带了指定上行资源的DCI format 0...
2018-03-09 15:57:46
2860
1
原创 LTE学习笔记--PHY--PDSCH
UE在解出PDCCH后,可以拿到对应PDSCH的 DCI信息。该DCI除了包含所对应PDSCH的位置、MCS信息之外,还指明了数据是否是重传数据以及传输使用的层、预编码等相关信息。与其他物理信道基于PRB不同,PDSCH基于VRB传输。 根据VRB映射PRB的方式不同,PDSCH有三种资源分配类型,分别是Type 1、Type 2和Type 3。PDSCH 传输具体所用的资源分配类型取决于 eN...
2018-03-09 15:50:43
11106
NIO简易服务器框架、文件传输
2015-09-21
Java异步发送文件demo
2015-09-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人