- 博客(75)
- 资源 (10)
- 收藏
- 关注
原创 c++类对象内存模型(一)
C++对象模型可以概括为以下2部分:1. 语言中直接支持面向对象程序设计的部分,主要涉及如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等。2. 对于各种支持的底层实现机制。在c语言中,“数据”和“处理数据的操作(函数)”是分开来声明的,也就是说,语言本身并没有支持“数据和函数”之间的关联性。在c++中,通过抽象数据类型(abstract data type,ADT),在类中定义数据和函数,来实现数据和函数直接的绑定。;。
2023-11-12 19:44:36 370
原创 生活中的视音频技术
解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。因为下载的来源不同,这些电影文件有不同的格式,用不同的后缀表示:avi,rmvb,mp4,flv,mkv等等(当然也使用不同的图标)。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。他们的过程如图所示。视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。
2023-10-11 18:08:02 1268
原创 Qt框架概要梳理
元对象系统的核心思想是利用moc编译器,识别源码中的Q_OBJECT宏,添加一个静态成员对象staicMetaObject,扫描类中的所有属性和方法,把属性,方法,信号,槽函数都注册到静态对象中,并提供一个对外获取静态对象地址的方法:metaObject(),实现Qt的反射机制。MOC编译器的作用就是自动添加QOBJECT宏的展开代码,注册信号与槽函数,注册类属性信息,添加必要的元对象系统代码。适合简单的工具开发,对内存和包体要求宽松的环境。对于Qt应用来说,所有事件分位两类:1,系统事件.2,应用事件.
2023-10-01 14:14:24 366
翻译 Qt5.15 QObject类官方文档翻译
QObject 类The QObject class is the base class of all Qt objects. More…QObject类是所有Qt对象的基类。更多…Header:#include <QObject>qmake:QT += coreInherited By:QAbstractAnimation, QAbstractEventDispatcher, QAbstractItemDelegate, QAbstractItemModel
2023-09-28 16:50:34 255
转载 vscode wsl 远程模式下vim插件autoSwitchInputMethod自动切换不起作用
而且感觉项目没什么人维护了,也不发布新版本,前端时间我提了个修复 bug 的 PR,来解决启用自动切换输入法功能时,按 s 或 c 键修改光标下的文本后,没有立即进入 insert 模式的问题,这导致继续输入后会有非预期的文本被替换掉,PR 早就合并了,但已经过去很长时间了,也没有新的 release 出来,上一个 release 版本是在 3 月初发布的,距今已经将近 4 个月。github 上遗留了一大堆 issue 无人处理,已发布版本中各种小 bug 也没人修复,唉。
2023-09-15 22:02:02 268
翻译 win10环境下VSCode的WSL中c++开发调试环境
在本教程中,您将配置Visual Studio Code以在Windows Subsystem for Linux(WSL)中使用Ubuntu上的GCC C++编译器(g++)和GDB调试器。WSL是Windows中的Linux环境,直接在机器硬件上运行,而不是在虚拟机中运行。如果您的工作区中已经有一个launch.json文件,那么在确定如何运行和调试您的C++文件时,播放按钮将从中读取。注意:如果您直接在Linux机器上工作,而不是在WSL中工作,则适用安装g++编译器和GDB调试器的设置步骤。
2023-09-05 11:38:52 1109
转载 OpenGL的窗口和交互工具包项目
freeglutfreeglut是 GLUT (OpenGL Utility Toolkit)的一个免费开源替代库。在程序中负责创建窗口、初始化 OpenGL 上下文和处理输入事件所需的所有系统特定的杂务,从而允许创建真正可移植的OpenGL程序。在 OpenGL 项目开发中,freeglut一般搭配glew一起使用;
2023-04-10 16:18:32 466 1
原创 c++高并发tcp网络服务器实例渐进式教程-08
通过epoll实现的tcp服务器可以达到百万的并发量。著名的网络软件Nginx,Redis都是通过epoll方式实现的。下面继续通过我们的简单业务代码来演示epoll的用法。业务逻辑如下:Linux系统提供一下调用来创建和管理epoll:......
2022-07-12 16:49:10 866
原创 c++高并发tcp网络服务器实例渐进式教程-07
select虽然可以复用线程,但是存在两个致命缺点:这节课内容先介绍poll方式的IO复用模型我们的TCP服务器业务比较简单,代码架构简化模型如下:编译运行编译客户端代码:启动客户端:client1 的第一个参数是服务端的地址(192.168.199.160)fds一种结构体指针,这里表示结构体数组,结构体定义如下:nfdsnfds_t 是一个无符号整型。表示描述符索引边界。timeout超时时间返回值如果成功,返回有事件发生的描述符个数,即fds数组中元素的reven
2022-07-11 19:12:11 536
原创 c++高并发tcp网络服务器实例渐进式教程-06
所谓IO复用,复用的是线程,无论是accept的新链接事件,还是recv的可读事件,都可以在同一个线程中完成,不用引入新的独立线程。IO复用随着历史发展经历了3个主要阶段,即select(),poll(),epoll().这节课内容先介绍select方式的IO复用模型我们的TCP服务器业务比较简单,代码架构简化模型如下:服务器架构中只有一个主线程,主线程中有一个while死循环,while循环里面嵌套了一个有限的for循环。二 编译运行2.1 服务端编译运行编译客户端代码:启动客户端:cl
2022-07-08 13:15:24 1068
原创 c++高并发tcp网络服务器实例渐进式教程-05
上一节我们实现了一个较为高效的tcp服务器,主要架构是主线程负责接收新的客户端连接请求,把新链接放入任务队列中,子线程负责处理任务队列中每个tcp连接的数据收发任务。这样系统不必为每个连接申请单独的线程资源,大大提高了单台系统并发数。上一节的服务器是用阻塞io模式实现的,阻塞io模式是socket默认方式。如要要切换为非阻塞io模式需要手动添加代码现在我们用非阻塞io模式来实现上一节的tcp服务器。有同学会问,非阻塞io相比阻塞io有什么优势?我只能说优势是肯定有的,只不过我们当前服务器业务逻辑较为简单
2022-06-29 19:37:38 882
原创 c++高并发tcp网络服务器实例渐进式教程-04
上节我们介绍了一个多任务的TCP服务器,但是每个任务都会创建一个线程,系统的线程承载量是不高的,大几十个线程就可能压垮系统,这样无法实现我们高并发高性能TCP服务器的目标。这节内容我们继续在上一节的基础上改进我们的服务器。既然每个任务不能单独占用一个线程,那可以把所有响应任务放到单独一个子线程中处理,主线程只负责监听新的客户端连接,并把新的连接下放的子线程中处理。那主线程和子线程怎样交互呢?答案是添加一个任务队列,主线程把已经建立的连接放入任务队列中,子线程循环遍历任务队列,有连接存在就执行客户端以服务的数
2022-06-28 16:44:30 812
原创 c++高并发tcp网络服务器实例渐进式教程-03
上古TCP服务器上一篇的远古服务器,是单线程+阻塞IO模式的,一次只能连接一个客户端,无法同时为多个客户端提供连接。现在我们为每个客户端的连接新建一个线程,收发客户端数据都放在各自的线程里面,互不干扰。模式如下图:一 服务端编码//server2.cpp#include<unistd.h>#include<iostream>#include<sys/socket.h>#include<arpa/inet.h>#include<sign
2022-04-22 15:15:38 2845
原创 软件项目管理大纲
项目管理九大知识域一:项目整体管理。1, 制定项目章程。2, 制定项目初步范围说明书。3, 制定项目管理计划。4, 指导和管理项目执行。5, 监控项目工作。6, 整体变更控制7, 项目收尾。二:项目范围管理。1, 范围计划。2, 范围定义。3, 制作工作分解结构(WBS)【范围基准】。4
2022-04-21 14:29:11 396
原创 c++高并发tcp网络服务器实例渐进式教程-02
远古socket通信一 前言在计算机网络诞生不久的那个年代,计算机操作系统是单任务的,windows对应的是dos系统,一个时刻只允许运行一个进程,那时候的socket通信不存在并发的概念,就是单纯的串行socket通信。一个节点发送数据,一个节点接收数据。基本的socket通信建立流程如下:二 服务端2.1 服务端代码编写建立socket通信的步骤也是大多数教材的范例,以下是一个服务端的代码示例,我们可以简单回顾一下://server1.cpp#include<unistd.h
2022-04-21 11:09:32 3025
原创 c++高并发tcp网络服务器实例渐进式教程-01
一 概述对于socket网络编程刚入门的同学而言,初次看到阻塞,非阻塞,同步模型,异步模型,IO复用,reactor模型,select/poll/epoll这些概念,往往一脸懵逼,似懂非懂,最后啃完各种教程往往都自我感觉已经懂了,但是自己实际去编写一个高性能服务器代码时候,却不知道从何入手。以前看懂的,过段时间又忘记了。这些都是因为没有亲手实践过这些概念,网上的代码示例大多数都是新手写的,过于简单,千篇一律,更重要的是不成体系。想通过阅读nginx,redis等成熟开源代码学习,但动不动大几万规模的代码都
2022-04-20 10:44:00 4052 1
原创 lua日志实现--打印table
打印结果用法print_r(table,"post method:Login")代码local rpc_log_off = 0 -- 1关闭log,0打开loglocal function write_file(fd,str) if fd then fd:write(str .. '\n') endendlocal function dump_value_(v) if type(v) == "string" then v = "
2021-12-29 12:11:54 2068 1
转载 lua第三方字节流序列化与反序列化模块--lpack
最近在研究luasocket,准备用全部用lua的扩展库来实现一套轻量级框架,用来做一些工具、简单的游戏服务器,以及作为网络库用在cocos2dx中。完善的网络库必然会遇到粘包、半包的问题,luasocket也不例外,由于网络部分在lua,协议的制定和buff的解析都没有合适的方案,又不想在C++中来封装接口,后面在网上查了一些资料,发现lua也有一个二进制打包的扩展库——lpack,了解之后发现还是蛮好用的,就决定使用它来做buff解析,用以解决粘包、半包的问题。首先需要下载lpack的源码,地址是l
2021-12-29 11:54:32 882
原创 windows10系统下vue开发环境搭建
安装NodeJs下载地址:http://nodejs.cn/download/到官网下载自己系统对应的版本,按照推荐的方式默认安装,这里不再赘述。安装完成后,打卡powershell,执行命令node -v查询一下,检查是否正常安装。如果提示找不到node命令,添加node安装路径到系统环境变量,重启powershell,再试。如果你安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级。sudo npm install npm -g #linuxnpm install npm -g
2021-12-14 19:41:24 457
原创 yocto项目目录结构解释
总目录以下结构为yocto工程的一些通用的结构。实际工程中,各个厂商可能根据自己的需要进行剪裁,但是整体的结构以及每个目录存放的内容大体上是一致的。bitbake 工具目录bitbake,是一metedate解释器,读取metedate并执行定义的task。执行bitbake命令时,其实执行的就是bitbake/bin/下面的文件。build 用户配置文件和工程构建输出目录。build目录在建立环境变量时进行创建并进行配置文件初始化。构建的所有文件都在该目录下组织存放。documentatio
2021-12-07 08:47:13 1971
原创 yocto项目下载与编译
准备进入WSL2子系统,安装编译依赖:sudo apt install -y gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping libsdl1.2-dev xterm下载yocto下载wget https://git
2021-12-06 11:14:53 1653
原创 高通5G智能平台概述
高通5G智能平台概述高通 android 智能手机解决方案的软件包括两个部分以linux 操作系统为基础的 android 系统以 L4,REX为基础的 Modem 部分在高通系列的架构中,一个IC内部集成有两个ARM处理器,一个ARM9(或者arm11),专门负责处理通信协议,射频以及GPIO等,软件架构采用 AMSS, 另外一个是ARM11,用来处理多媒体,上层应用,以及其他的一些任务,运行的系统是 android 系统,这两个处理器之间通过共享内存的硬件方式来进行通信。什么是L4,
2021-12-02 14:34:55 1546
转载 进程--用户地址空间和内核地址空间
用户态地址空间text:代码段可执行代码、字符串字面值、只读变量data:数据段,映射程序中已经初始化的全局变量bss:存放程序中未初始化的全局变量heap:运行时的堆,在程序运行中使用 malloc 申请的内存区域mmap:共享库及匿名文件的映射区域stack:用户进程栈内核态地址空间直接映射区:线性空间中从 3G 开始最大 896M 的区间,为直接内存映射区动态内存映射区:该区域由内核函数 vmalloc 来分配永久内存映射区:该区域可访问
2021-11-27 15:09:22 1998
转载 代码阅读——十个C开源项目
代码阅读——十个C开源项目1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/~cz210552/webbench.html2. CMockerycmockery是google发布的用于C单元测试的一个轻
2021-11-26 17:27:47 195
转载 深入剖析C语言内存对齐
字节对齐基本概念现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没
2021-11-25 09:21:39 353
转载 c语言的柔性数组
结构中最后一个元素允许是未知大小的数组,这个数组就是柔性数组。但结构中的柔性数组前面必须至少一个其他成员,柔性数组成员允许结构中包含一个大小可变的数组,sizeof返回的这种结构大小不包括柔性数组的内存。包含柔数组成员的结构用malloc函数进行内存的动态分配,且分配的内存应该大于结构的大小以适应柔性数组的预期大小。柔性数组到底如何使用?不完整类型C和C++对于不完整类型的定义是一样的,不完整类型是这样一种类型,它缺乏足够的信息例如长度去描述一个完整的对象。不完整类型举例:前向声明就是一种常用的不完
2021-11-25 09:09:20 374
翻译 c语言标准
维基百科,自由的百科全书ANSI C、ISO C、Standard C是指美国国家标准协会(ANSI)和国际标准化组织(ISO)对C语言发布的标准。历史上,这个名字专门用于指代此标准的原始版本,也是支持最好的版本(称为C89或C90)。使用C的软件开发者被鼓励遵循标准的要求,因为它鼓励使用跨平台的代码。ANSI C和ISO C的历史C的第一个标准是由ANSI发布的。虽然这份文档后来被国际标准化组织(ISO)采纳并且ISO发布的修订版亦被ANSI采纳,但名称ANSI C(而不是ISO C)仍被广泛使用。
2021-11-24 11:21:50 1464
转载 systemd教程(三)
下来会通过示例来描述不同Service Type值的应用场景。在此之前,强烈建议先阅读前后台进程父子关系和daemon类进程来搞懂进程之间的关系和Daemon类进程的特性。systemd service:Type=forking当使用systemd去管理一个长久运行的服务进程时,最常用的Type是forking类型。使用Type=forking时,要求ExecStart启动的命令自身就是以daemon模式运行的。而以daemon模式运行的进程都有一个特性:总是会有一个瞬间退出的中间父进程,如果不了解这
2021-11-22 10:58:01 7996 2
转载 systemd教程(二)
作者: 阮一峰日期: 2016年3月 8日上一篇文章,我介绍了 Systemd 的主要命令,今天介绍如何使用它完成一些基本的任务。一、开机启动对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例)。$ sudo systemctl enable httpd上面的命令相当于在/etc/systemd/system目录添加一个符号链接,指向/usr
2021-11-17 08:50:06 775
转载 systemd教程(一)
作者: 阮一峰日期: 2016年3月 7日Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。本文介绍它的基本用法,分为上下两篇。今天介绍它的主要命令,下一篇介绍如何用于实战。一、由来历史上,Linux 的启动一直采用init进程。下面的命令用来启动服务。$ sudo /etc/init.d/apache2 start# 或者$ service apache2 start这种方法有两个缺点。一是启动时间长。init进程是串行启动,只有前一个进
2021-11-16 12:37:07 1132
转载 Linux 守护进程的启动方法
作者: 阮一峰日期: 2016年2月28日“守护进程”(daemon)就是一直在后台运行的进程(daemon)。本文介绍如何将一个 Web 应用,启动为守护进程。一、问题的由来Web应用写好后,下一件事就是启动,让它一直在后台运行。这并不容易。举例来说,下面是一个最简单的Node应用server.js,只有6行。var http = require('http');http.createServer(function(req, res) { res.writeHead(200, {'C
2021-11-16 11:30:52 1978
转载 Linux的启动过程
一、概述为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。二、类的虚表每个包含了虚函数的类都包含一个虚表。我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函数,那么其继承类也可调用这些虚函数,换句话说,一个类继承了包含虚函数的基类,那么这个类也拥有自己的虚表。我们来看以下的代码。类A包含虚函数vfunc1,vfunc2,由于类A包含虚函数,故类A拥有一个虚表。c
2021-11-13 13:37:56 197
转载 计算机的启动过程
从打开电源到开始操作,计算机的启动是一个非常复杂的过程。我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示… 这几天,我查了一些资料,试图搞懂它。下面就是我整理的笔记。零、boot的含义先问一个问题,"启动"用英语怎么说?回答是boot。可是,boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boot是bootstrap(鞋带)的缩写,它来自一句谚语:"pull oneself up by one's bootstraps"字面意思是"拽着鞋带把自己拉起来",
2021-11-12 11:03:22 2520
原创 git常用场景命令
git概念名词Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库新建本地代码仓库# 在当前目录新建一个Git代码库$ git init# 新建一个目录,将其初始化为Git代码库$ git init [project-name]# 下载一个项目和它的整个代码历史$ git clone [url]配置# 显示当前的Git配置$ git config --list# 编辑Git配置文件$
2021-11-09 20:11:52 123
转载 nginx配置文件详解
######Nginx配置文件nginx.conf中文详解######定义Nginx运行的用户和用户组user www www;#nginx进程数,建议设置为等于CPU总核心数。worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]error_log /usr/local/nginx/logs/error.log info;#进程pid文件pid /usr/local/nginx/
2021-11-08 19:24:29 146
原创 Linux应用开机启动的几种方式
init在类Unix 的计算机操作系统中,Init(初始化的简称)是在计算机启动的第一个进程。Init 是一个守护进程,它持续运行,直到系统关闭。它是所有其他进程的直接或间接的父进程。因为 init 的参数全在/etc/init.d目录下,所以使用 init 启动一个服务,应该这样做:$ sudo /etc/init.d/nginx startserviceservice是一个运行System V init的脚本命令。System V init 是/etc/init.d 目录下的参数。ser
2021-11-06 17:08:05 1026
跟我一起写 Makefile (PDF 重制版)
2018-10-28
c++设计模式GoF23
2018-10-28
vim常用插件及vimrc
2012-12-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人