自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Hello World

Write the code,change the world

  • 博客(98)
  • 资源 (6)
  • 收藏
  • 关注

原创 valgrind和Kcachegrind性能分析工具详解

一、valgrind介绍valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,用于构建动态分析工具的装备性框架。它包括一个工具集,每个工具执行某种类型的调试、分析或类似的任务,以帮助完善你的程序。Valgrind的架构是模块化的,所以可以容易的创建新的工具而又不会扰乱现有的结构。valgrind主要包含以下工具:1、memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。2、callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。3、cacheg

2021-02-01 16:30:49 1313

原创 webrtc sdp(会话传输协议)详解

1、什么是sdpSDP(Session Description Protocol)描述会话协议,它只是一种信息格式的描述标准,本身不属于传输协议,但是可以被其他传输协议用来交换必要的信息,用于两个会话实体之间的媒体协商。2、sdp协议结构SDP的文本信息包括:会话信息网络信息媒体信息安全信息服务质量和分组信息 +---------------------+

2020-11-12 15:32:11 937

原创 GDB调试命令详解

GDB是什么调试程序程序中出现的语法错误可以借助编译器解决;但逻辑错误则只能靠自己解决。实际场景中解决逻辑错误最高效的方法,就是借助调试工具对程序进行调试。所谓调试(Debug),就是让代码一步一步慢慢执行,跟踪程序的运行过程。比如,可以让程序停在某个地方,查看当前所有变量的值,或者内存中的数据;也可以让程序一次只执行一条或者几条语句,看看程序到底执行了哪些代码。也就是说,通过调试程序,我们可以监控程序执行的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低

2021-03-15 22:30:33 79536 5

原创 C++11 for区间遍历:vector几种遍历方式

近来,基本上所有现代编程语言都有一种对一个区间写for循环的便捷方式。最终,C++也有了相同的概念;你可以给循环提供一个容器,它帮你迭代。example:#include <iostream>#include <vector>#include <map>using namespace std;int main() { vector<int> num{3, 7, 1, 7, 9}; // 修改你正在迭代的容器的值,或者你想避

2020-09-22 20:32:16 13959 1

转载 webrtc中AGC的应用

webrtc–AudioProcessing的使用1.AudioProcessing的实例化和配置:AudioProcessing* apm = AudioProcessing::Create(0);apm->level_estimator()->Enable(true);//启用重试次数估计组件apm->echo_cancellation()->Enable(true);//启用回声消除组件apm->echo_cancellation()->enable_me

2020-06-14 17:29:16 1153

原创 h264和aac封装flv

flv格式解析FLV是一个二进制文件,简单来说,其是由一个文件头(FLV header)和很多tag组成(FLV body)。tag又可以分成三类:audio,video,script,分别代表音频流(0x8),视频流(0x9),脚本流(0x12),而每个tag又由tag header和tag data组成。flv官方标准文档分析之前推荐一个flv分析工具:flv分析工具工具的使用说明和出...

2020-02-03 15:29:53 1170 1

原创 git 常见问题总结(持续更新中)

关于Git无法提交 index.lock的解决办法今天提交代码时,在一次提交,莫名其妙没成功后,再次用git commit -a命令时,出现以下错误,无论是用git还是TortoiseGit都会出现以下这个问题。。$ git commit -afatal: Unable to create 'e:/git/Android/XXXXXX/.git/index.lock': File exis...

2019-12-29 17:08:55 468

原创 cmake用法及常用命令总结(全)

CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的。指令是大小写无关的,参数和变量是大小写相关的。但推荐全部使用大写指令。符号 # 后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。自己写了一个小例子,包含了静态库和动态库以及基本的依赖关系。按照目录结构加入文件(筛选器)#按目录结构加入文件macro(cre...

2019-07-23 16:53:36 5302

原创 C/C++读写文件的几种方法fstream fopen、fwrite()、fread()操作

C中采用的主要是文件指针的办法,C++中对文件的操作主要运用了“文件流”(即非标准的输入输出)的思想c读写文件fopenC 库函数FILE *fopen(const char *filename, const char *mode)使用给定的模式 mode 打开 filename 所指向的文件。包含头文件:#include<stdio.h>fopen() 函数的声明...

2019-07-13 20:25:41 4696

转载 关于Git无法提交 index.lock的解决办法

今天提交代码时,在一次提交,莫名其妙没成功后,再次用git commit -a命令时,出现以下错误,无论是用git还是TortoiseGit都会出现以下这个问题。。$ git commit -afatal: Unable to create 'e:/git/Android/XXXXXX/.git/index.lock': File exists.If no other git proce...

2019-07-12 19:42:43 2428

转载 git回滚到任意版本

git回滚先显示提交的log$ git log -3commit 4dc08bb8996a6ee02fAuthor: Mark <xxx@xx.com>Date: Wed Sep 7 08:08:53 2016 +0800 xxxxxcommit 9cac9ba76574da2167Author: xxx<xx@qq.com>Date: ...

2019-07-12 19:33:45 160

原创 jsoncpp 构造空数组

创建json格式的数据时,为了保证数据为空,字段也要存在的情况,需要构造空数组。类似下面这种形式:{"FurnitureItemObject":[],"FurniturePlaceItemObject":[],"RoomNum":0}解决方案:可以用 resize 解决这个问题:Json::Value root;root["FurniturePlaceItemObject"].resi...

2019-07-11 19:37:44 2345

转载 Git Submodule管理项目子模块

使用场景当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到git的submodule功能。常用命令git clone <repository> --recursive 递归的方式克隆整个项目git submodule add <repository> <path> 添加子模块...

2019-05-18 16:38:17 1711

转载 VS 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案

在VS中编译 C 语言项目,如果使用了 scanf 函数,编译时便会提示如下错误:error C4996: ‘scanf’: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See onlin...

2019-04-12 13:47:23 1530

原创 C++ 获取Unix时间戳

什么是Unix时间戳?Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广泛采用2038年1月19日会发生什么?在2038年1月1...

2019-04-11 20:44:33 14130

转载 VS的工作目录和输出目录

C+ +项目,解决方案总文件夹下就只包含解决方案配置文件sln和一个项目总文件夹和一个Debug文件夹以及一个Release文件夹(共四个东东,其中Debug和Release文件夹中存放最终生成的结果exe或dll,要注意如果不使用Release生成,则不存在Release文件夹),而项目总文件夹下包含C++源文件头文件、项目配置文件和一个Debug文件夹以及一个Release文件夹(一定要注意,...

2019-04-09 13:46:24 4213

转载 VC++调试错误的解决方案

这篇文章主要用来记录使用Visual Studio过程中,出现的各种error,并提供自己当时解决的方案。但是,一个error可能由不用原因引起的,文中案例仅供大家参考。 nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex 解决:将工程设置为Using MFC in sta...

2019-04-07 20:14:48 1245

转载 #pragma once与 #ifndef的区别

为了避免同一个文件被include多次可以用以下两种方法:1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。方式一:#ifndef __SOMEFILE_H__#define __SOMEFILE_H__... ... // 一些声明语句#endif方式二:#pragma on...

2019-04-07 19:49:24 873

转载 strcmp()字符串比较函数用法

函数原型:int strcmp(const char *s1, const char *s2);头文件:#include <string.h>功能: 用来比较两个字符串参数: s1、s2为两个进行比较的字符串返回值: 若s1、s2字符串相等,则返回零;若s1大于s2,则返回大于零的数;否则,则返回小于零的数。说明: strcmp()函数是根据ACSII码的值来比较两个...

2019-04-04 13:26:16 14009

转载 C、C++中的static和extern关键字

1.首先,关于声明和定义的区别这种写法(函数原型后加;号表示结束的写法)只能叫函数声明而不能叫函数定义,只有带函数体的声明才叫定义,比如下面只有分配存储空间的变量声明才叫变量定义,其实函数也是一样,编译器只有见到函数定义才会生成指令,而指令在程序运行时当然也要占存储空间。那么没有函数体的函数声明有什么用呢?它为编译器提供了有用的信息,编译器在翻译代码的过程中,只有见到函数原型(不管带不带函数...

2019-04-03 19:45:08 381

转载 error LNK1169 找到一个或多个多重定义的符号的解决方法

问题描述如下:有 三个源文件,A.h、B.cpp、C.cpp。A.h是头文件,其中声明了三个变量a1、a2、 a3。B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件。B.cpp和C.cpp中均包含头文件 A.h。在编译时,编译能够通过,但链接时出了问题,出现”error LNK1169: 找到一个或多个多重定义的符号“的错误。经过分析,确定了这是由于两个实现文件...

2019-04-03 14:56:49 3267 1

原创 vs2013编译obs源码

obs源码下载一种是在GitHub上下载最新的代码git clone --recursive https://github.com/jp9000/obs-studio.git–recursive命令可以将其依赖的子模块一块clone下来而不用之后再单独下载了。另外一种可以在GitHub下载以前的源码直接进行编译,官网上也有其地址,由于我cmake的最新的代码一直有问题,所以下载以前的版本...

2019-04-02 14:20:13 605 1

原创 Qt线程—QThread的使用--run和movetoThread的用法

Qt使用线程主要有两种方法:方法一:继承qthread,重写run()的方法QThread是一个非常便利的跨平台的对平台原生线程的抽象。启动一个线程是很简单的。让我们看一个简短的代码:生成一个在线程内输出"hello"并退出的线程。 // hellothread/hellothread.h class HelloThread : public QThread { Q_OBJEC...

2019-04-01 15:18:15 2430

转载 Qt信号和槽机制

概述信号和槽机制是QT的核心机制,要精通QT编程就必须对信号和槽有所了解。信号和槽是一种高级接口,应用于对象之间的通信,他是QT的核心特性,也是QT差别于其他工具包的重要地方。信号和槽是QT自行定义的一种通信机制,他独立于标准的C/C+ +语言,因此要正确的处理信号和槽,必须借助一个称为moc(Meta Object Compiler)的QT工具,该工具是个C++预处理程式,他为高层次的事件处理...

2019-04-01 14:47:00 2035

原创 Qt 中用QProcess调用cmd命令

项目做到一定阶段,常常须要在原来的project上调用外部程序。Qt为此提供了QProcess类,QProcess可用于完毕启动外部程序,并与之交互通信。基本用法: QProcess p(0); p.start("cmd", QStringList()<<"/c"<<"ping www.baidu.com"); p.waitForStarted(...

2019-03-31 21:55:06 5083

转载 Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法

Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法经常我们的程序中需要访问一些特殊的路径,比如程序所在的路径、用户目录路径、临时文件夹等。在 Qt 中实现这几个功能所用的方法虽然都不难,但是各不相同,每次用到时还要现去查,很不方便。因此就写了这篇博客,把这几种需求的实现方式总结了一下。算是个备忘录吧。程序所在路径获取程序所在路径,QCoreApplication 类里就实现...

2019-03-31 20:27:13 818

转载 Qt获取选择的文件夹和文件路径

获取文件夹路径static QString getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &...

2019-03-31 20:11:21 19308

原创 Qt下拉对话框 ComboBox的用法

介绍ComboBox是Qt的下拉菜单的一个控件,通过下拉菜单选择不同的选项。基本用法 m_ComBox = ui.comboBox; //设置默认显示值的索引,从0开始 m_ComBox->setCurrentIndex(1); //关联信号和槽 QObject::connect(m_ComBox, SIGNAL(currentTextChanged(QString)),...

2019-03-30 10:45:34 4272

原创 Qt 从菜单栏打开文件

Qt从菜单栏的下拉菜单选择文件构造函数中设置打开动作信息 //打开文件 m_menu = ui.menu;// m_menu->menuAction = new QAction(QIcon(tr("images/open.ico")), tr("打开文件"), this); QAction *Action = new QAction(tr("打开文件"), this); //设置...

2019-03-30 10:15:44 2799

转载 Qt基础学习---滑动条之QSlider

Qt滑动条基本用法://mydialog.h#ifndef MYDIALOG_H#define MYDIALOG_H#include <QDialog>class QLineEdit;class QSlider;class MyDialog : public QDialog{ Q_OBJECTpublic: explicit MyDialog(QWidget ...

2019-03-26 13:45:48 6077

转载 QT中设置窗口背景颜色

QWidget是所有用户界面对象的基类,这意味着可以用同样的方法为其它子类控件改变背景颜色。Qt中窗口背景的设置,下面介绍三种方法。1.使用QPalette2.使用Style Sheet3.绘图事件一般我不用QSS设置窗口背景,也不建议使用。(这里是对于窗口而,如果是子部件当然可以)。因为窗口使用QSS设置背景之后,若子部件不使用同样的方式来设置,默认则会继承父窗口的样式。使用QPal...

2019-03-21 14:56:59 13945 1

转载 QT 设置应用程序名称和主窗口标题

1、设置应用程序名称在工程文件.pro文件中,修改Target为想设置的名称TARGET = MXEditer2、设置主窗口标题,在main文件中,我的主窗口是MainWindow.int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.setWindowTitl...

2019-03-21 14:43:49 21415 4

原创 Qt打开文件对话框同时选中多个文件或单个文件

Qt中打开单个文件//str_path为文件路径QString str_path = QFileDialog::getOpenFileName(this, tr("选择转码文件"), tr("/home"), tr("视频文件(*.mp4 *.m3u8);;所有文件(*.*);;"));打开多个文件QStringList str_path_list = QFileDialog::getO...

2019-03-21 14:29:40 8926

转载 git Bush应用崩溃If no other git process is currently running, this probably means a git process crashe

问题:用git Bush提交的时候遇到一个问题,不论做什么操作都遇到下面的错误信息:fatal: Unable to create 'XXXXXXXXX' : File exists.If no other git process is currently running,this probably means a git process crashed in this reposit...

2019-02-28 19:06:11 472

原创 用命令bat打开某个文件或文件夹

打开文件或文件夹可以用start命令,start命令会根据文件关联的程序自动调用关联的程序打开文件和文件夹.可以用记事本写如下命令,之后改扩展名为.bat即可打开文件夹start "" "c:\windows"或start exploer "c:\windows"调用Word打开.doc文件start "" "c:\test.doc"或start winword "c:\t.

2019-01-10 13:53:26 66222 6

转载 git pull 提示 There is no tracking information for the current branch

在执行git pull的时候,提示当前branch没有跟踪信息:git pullThere is no tracking information for the current branch.Please specify which branch you want to merge with.是因为本地分支和远程分支没有建立联系 (使用git branch -vv 可以查看本地分支和远程...

2019-01-09 17:29:40 2498

转载 理解ffmpeg中的pts,dts,time_base

首先介绍下概念:PTS:Presentation Time Stamp。PTS主要用于度量解码后的视频帧什么时候被显示出来DTS:Decode Time Stamp。DTS主要是标识读入内存中的bit流在什么时候开始送入解码器中进行解码也就是pts反映帧什么时候开始显示,dts反映数据流什么时候开始解码怎么理解这里的“什么时候”呢?如果有某一帧,假设它是第10秒开始显示。那么它的pts是多...

2019-01-09 17:02:15 4315

原创 Git 分支 - 分支的新建与合并

简单总结:1.想在基于当前分支#12基础上拉新分支进行开发,从当前分支拉copy开发分支#15:$git checkout -b #152.把新建的分支push到远端,才会在远程仓库显示:$git push origin #153.提交新分支#15的修改后,想合并到拉出来的分支#12,则切换到#12分支,进行merge操作:$ git merge #154.如果觉得之后#15分...

2019-01-08 21:25:07 360

转载 如何终止线程的运行(C/C++)

想要终止线程的运行,可以使用以下方法:1、线程函数返回(最好使用该方法)。2、通过调用ExitThread函数,线程将自行撤消(最好不使用该方法)。3、同一个进程或另一个进程中的线程调用TerminateThread函数(应避免使用该方法)。4、ExitProcess和TerminateProcess函数也可以用来终止线程的运行(应避免使用该方法)。下面将详细介绍终止线程运行的方法:1-...

2018-12-20 09:44:08 13104

原创 关于阻塞和非阻塞,同步和异步的总结

1 例子故事:老王烧开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。老王想了想,有好几种等待方式1.老王用水壶煮水,并且站在那里,不管水开没开,每隔一定时间看看水开了没。-同步阻塞老王想了想,这种方法不够聪明。2.老王还是用水壶煮水,不再傻傻的站在那里看水开,跑去寝室上网,但是还是会每隔一段时间过来看看水开了没有,水没有开就走人。-同步非阻塞老王想了想,...

2018-12-19 21:32:42 148

obs源码vs2013及以上可以编译

可以用vs2013编译的obs源码,也是从官网找的以前的版本,最新的编译一直有问题,所以编译了上一个版本的。

2019-04-02

json编译后的lib文件和json.h文件

本资源是json源码编译后生成的lib文件和json.h文件,json源码下载地址为 https://download.csdn.net/download/qq_28351609/10822720

2018-12-02

jsoncpp源码编译版本

JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择 JSON的全称为:JavaScript Object Notation ,顾名思义,JSON是用于标记javascript对象的,详情参考http://www.json.org/。 JsonCpp为解析json的第三方库来,JsonCpp是比较出名的c++解析库,在json官网也是首推的。本版本可以用cmake编译生成lib。编译后生成的lib文件,下载地址为 https://download.csdn.net/download/qq_28351609/10822737

2018-12-02

vs属性页总结

本文档对vs中项目的属性页进行了整理,主要介绍了各个属性所表示的含义。

2018-07-24

cmake常用代码

本文档对cmake常用的语句进行了 总结,说明其含义,并列举了相应的例子。

2018-07-24

git命令总结

涉及常用的git命令,说明其用法,并进行了列举了相应的例子

2018-07-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除