8 qazw9600

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 9w+

多线程技术

说明QT支持以下四种方式实现多线程程序。QThread:低级接口并且支持可选的时间循环QThread是多线程编程的基础类,QThread实例就是线程实例。QThread支持两种使用方式:可以直接实例化QThread。可以继承QThread,实例其子类。实例化QThread(moveToThread方式)该方式是官方推荐使用方式,实例化QThread提供了一个并行的事件循环,允许在其它线程通过信号的方式调用其内部函数。使用流程:定义一个继承QObject的类,如下:*

2020-08-06 21:08:38

颜色空间

说明视频是由一帧帧图像快速切换实现,一帧帧图像可以简单理解为一张张图片,而图像是以像素点阵的方式来表示,然而如何表示每个像素点?视频分辨率就是点阵的规模,1280x720就是长1280,宽720的像素点阵。RGB 颜色空间RGB颜色空间以R(Red:红)、G(Green:绿)、B(Blue:蓝)三种基本色为基础,进行不同程度的叠加,从而产生丰富多彩的颜色,俗称三基色模式。原理:科学家发现红绿蓝三种颜色按照不同比例合成可以演化成其它任何一种颜色。常见格式RGB888:表示R,G,B分别

2020-08-05 20:59:55

网络编程 - http 通信

说明QT网络模块中的QNetworkAccessManager类提供了统一的网络访问管理接口,不仅仅支持http协议,还支持ftp,HTTPS等协议;QNetworkRequest封装了网络请求接口;QNetworkReply封装了网络回复接口。Tip:Qt4x分别使用QFtp和QHttp,Qt5以后统一用QNetworkAccessManager。使用基本使用引入网络模块, 在.pro文件中添加以下设置QT += network创建QNetworkAccessManager对象

2020-07-29 20:53:18

多线程 - 线程安全策略

说明初接触QT多线程,时常出现程序运行时提示以下信息:QObject: Cannot create children for a parent that is in a different thread.字面意思大体上是:父对象和子对象不能创建于不同的线程。该错误的原因体现了以下QT线程安全策略。线程安全策略构造时可设置父对象的类变量只能在其创建线程中使用,不能跨线程共享,即使是通过指针共享,不然运行时会提示以上错误;不需要父对象的类对象可以在多线程中共享,例如:class te

2020-07-28 21:30:42

Restful API 理解

说明相关词汇:Rest,Restful,Restful API。Rest:Representational State Transfer,中文直译:表现层状态转移;是Roy Fielding博士在2000年他的博士论文中提出的一种Web API定义风格,是前后端分离Web API定义的一套标准一套规范,不是框架或者其它东西。Restful:英语中形容词加上full类似于helpful,表示完全按照Rest风格定义。Restful API:完全按照Rest风格定义的API。由来前后端分离早

2020-07-28 09:40:49

小技巧 - 多起始状态循环

说明近日阅读libb64源码,发现以下写法:* 文件:cencode.c 函数:base64_encode_block...switch (state_in->step){ while (1) {case step_A: ...;case step_B: ...;case step_C: ...; }}* 使用int main(){ ...; base64_encode_block(); base64_

2020-07-27 21:27:10

基础概念 - 重载(overload),隐藏,覆盖和重写(override)

说明重载(overload),隐藏,覆盖和重写(override)几个概念容易混乱,特记录下。类内部重载(overload)重载是在一个域中,函数名称相同但是函数参数不同, 为了实现一个函数名支持多种的行为。重载和继承关系无关,存在于类内部。详细说明略。继承关系中的父类和子类隐藏和覆盖描述的对象不仅仅是父类和子类中的同名函数也包含同名变量,同名变量简单点,隐藏和覆盖是对应的,而同名函数隐藏和覆盖却不一定对应。隐藏/覆盖隐藏和覆盖是站在用户的角度,以命名为唯一标识,只要父类和

2020-07-25 14:01:20

内存碎片问题分析

说明之前在某公司,承担某款 64M小内存IPC产品开发时,出现现象:设备启动后不一会就自动重启,操作设备进行录像的话重启更快。CPU占用快速飙升,飙升进程是系统进程 kworker。重启原因是内核提示oom,应用程序被kill掉后,看门狗重启的设备,崩溃时free看起来还有4~5M内存,足够内存分配(设备上申请内存较小),内核打印信息类似如下,只是数据不同。SysRq : Show MemoryMem-info:Normal per-cpu:CPU 0: hi: 18, b

2020-07-22 20:25:51

Linux缓存机制

说明为了加快高速设备访问低速设备时的访问速度,缓存机制通过数据备份等方式实现高速设备对低速设备上数据的映射访问,以减少低速设备的访问次数,提高平均访问速度。常见场景CPU/内存CPU速度远远大于内存读取速度,为了提高内存的平均访问速度,CPU硬件上存在一级缓存,二级缓存,甚至三级缓存,读写速度不断下降,但是快于内存访问,缓存部分读写频繁的数据,也叫做CPU Cache。内存/硬盘内存读写速度远远快于硬盘,如果每次读写都去直接操作磁盘,一方面操作速度会被限制,一方面也会降低磁盘使用寿命,

2020-07-22 19:48:53

高级io - 偏移读写文件(pread & pwrite)

说明对文件进行偏移读写,传统方式使用seek或lseek设置文件偏移再进行读写操作,在linux平台上可以使用pread/pwrite函数。pread和pwrite函数是Linux提供的另外一种读取和写入文件的操作,pread函数的操作可以看作是顺序调用了lseek函数和read函数,同样pwrite函数也类似。详细说明可以通过man查看。对比传统方式pread和pwrite是线程安全的,而传统方式不是。功能一样,但是系统调用更少,性能更高。pread和pwrite是原子操作,而传统方式

2020-07-20 20:56:09

多线程架构和多进程架构选择

面试问题嵌入式平台下,应用多线程架构和多进程架构如何选择?问题分析该问题只有限定在嵌入式平台才有可问性,在PC平台,除非特殊限制或者系统原因,大部分复杂程序都是采用的多进程架构,因为需要充分利用资源。该问题虽然是问多线程还是多进程,但实际应用中基本上都是“进程+线程”的结合方式,并不是非此即彼,问题的重点在于是否创建多个进程。因此该问题可以分为两个问题:嵌入式平台下,是否必要将应用层划分为多个进程。功能在线程和进程之间如何划分,即哪些功能适合存在于多个进程,哪些功能适合存在于单进程中

2020-07-20 20:39:09

代码整理思考

说明个人一直觉得大部分中小公司的代码都非常混乱,从未遇到一份令人满意的代码;由于个人有较为严重的代码洁癖,在工作中,时常觉得经手代码比较混乱,因此经常对经手代码进行整理和调整,引发思索如下:什么是混乱混乱是事物给别人的客观感受,不同的人对混乱的容忍度不同,有些人有代码洁癖,一点点混乱都忍受不了,而有些人,代码乱就乱,只要能跑起来就行。代码由多个(包括两个)不同思维方式,不同代码风格的程序员编,并且没有进行统一和协调,互相侵入;不同代码风格导致代码风格的混乱,不同思维方式导致代码逻辑上的混乱。

2020-07-17 21:53:46

程序性能分析 - gperftools - Cpu Profiler

程序性能指标程序性能认证程序性能指标大部分情况下为运行时长。工具使用gperftoolsgperftools(google perftools)是一系列C/C++ 程序的性能工具,它是一个遵守 BSD 协议的开源项目。使用该工具可以对 CPU 时间片、内存等系统资源的分配和使用进行分析,或者使用其中的tcmalloc等库增加程序性能。库docs目录下有相应帮助文档。编译安装* 国内可以从github/gperftools获取源码wget https://github.com/gpe

2020-07-15 21:06:51

checksum 算法

说明checksum:总和检验码,校验和,可以理解为check(校验),sum(和)。在数据处理和通信领域,通过一定算法对传输的数据进行求和以校验数据的完整性和准确性。使用算法求和的算法大致是确定的,但是一些细节不是很重要,例如:校验和使用几个字节存储,只要收发两边处理规则一样就行。网上示例,如下:USHORT CICMP::CheckSum(USHORT *buff,int Size){ unsigned long cksum = 0; //将数据以字为单位累加到c

2020-07-08 21:02:33

protobuff3 初涉

说明Protobuf全称是Google Protocol Buffer,是google开发的一种高效轻便的结构化数据存储方式,可用于数据通信、数据存储等,也可以理解为结构化数据的序列化方法;类似于xml,Json等。与xml,json对比三种都与语言无关,平台无关Protobuf支持Java, C++, Python等多种语言,支持多个平台。Protobuf是二进制格式比xml,json等字符串协议更高效,也比XML更小(3~10倍),效率更快(20 ~ 100倍)。扩展性,兼容性

2020-07-04 18:24:38

编译原理 - 栈变量地址分配

说明变量地址在编译期就由编译器确定了(栈变量也一样,不同的是栈变量确定的是栈偏移),程序运行时才做真正的内存分配。栈空间由高地址往低地址分配。问题编译器处理栈变量地址分配有什么规则?后续测试,测试环境如下:Linux : gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4windows : Code::Blocks 17.12 普通局部变量int main(int argc, char **argv){ int a; char b; int

2020-07-04 11:53:01

Linux平台下hook技术研究

说明之前公司,C项目中为了程序检测内存泄漏问题,采用一个自己实现的库,能够记录内存分配和释放操作,程序结束或者通过信号可以生成dump信息来分析内存问题。技术分析内存分配和释放记录主要是通过hook(钩子)技术来获取的。hook技术通过预处理实现实现方式:创建一个头文件,通过宏替换的方式替换掉内存分配(malloc,calloc,realloc)和释放函数(free)。创建一个源文件,定义替换函数,在替换函数中记录调用和调用真正的目标函数和做相应处理。代码示例:* 头

2020-07-01 21:44:33

计算机原理 - 大小端

说明大小端问题由来:《格列佛游记》小说中,小人国为水煮蛋该从大的一端(Big-End)剥开还是小的一端(Little-End)剥开而争执,争执的双方分别被称为“大端派”和“小端派”。计算机领域大小端问题引申到计算机领域:将数据存入大于一个字节大小的内存中,例如:0x1存入4字节大小内存,数据是从内存高地址开始存储还是从内存低地址开始存储?一个字节的内存就不存在这个问题。正因为有以上争执,CPU既有采用大端模式的也有采用小端模式的,例如:arm,power,mips早期都坚持大端,但是也许是为了

2020-07-01 16:40:29

自举功能 - 软件复位

说明对于需要长时间运行的电子产品,例如:安防监控等,如果设备程序崩溃后不能自动恢复,可能会出现以下情况:设备操作无反应,用户以为设备坏掉了,并不知道需要断电重启,对产品质量怀疑。程序崩溃后所有功能中断,有些重要并且需要长时间稳定运行的功能无法延续,例如:定时闹钟等。对于智能音箱,需要实现定时闹钟等定时功能,需要长时间稳定运行,因此需要实现软件复位功能。程序崩溃是无法避免的程序崩溃的可能原因有:程序测试不充分,有bug导致程序崩溃,可以降低概率,但是无法彻底避免,中小公司产品非

2020-06-30 19:56:53

基础语法 - extern关键词

说明extern的英文意思是“外部”。何为外部?C/C++程序编译时,编译器并不是将所有源码一起编译,而是以单个源码文件为单元逐一编译,编译单个源码文件时其它源码文件是不可见,其它源码定义的函数和全局变量也是不可见的,是正在编译源码的外部定义。链接时才将所源码中有定义和使用链接到一起。作用使用extern声明外部定义,以避免编译单个源码时找不到全局变量或函数的声明,误判为代码错误。特点由于链接时,才将定义和使用链接到一起,因此如果声明外部变量时变量名写错,编译时不会报错,而是在

2020-06-28 21:52:21

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。
  • 原力探索 · S
    原力探索 · S
    在《原力计划【第二季】》打卡挑战活动中,发布 12 篇原创文章参与活动的博主,即可获得此勋章。(本次活动结束后统一统计发放)