C++
文章平均质量分 54
Stone_OverLooking
这个作者很懒,什么都没留下…
展开
-
C++ 使用matplot++ 处理数据生成svg图表
python的图表库很丰富,C++依赖于python的 matplotlib的库却有很多功能不足,显得很鸡肋,其他的一些库没有过多的研究,Matplot++编译需要依赖一堆第三方库,可以参考官网,但是github上也提供了编译好的静态库,使用Matplot++同时需要下载安装gnuplot,并将gnuplot的bin加入到环境变量。将include、lib加入到对应的位置,并配置好路径和库连接,这部分不多说了。这里主要说说不依赖于python的纯C++ 的图表库 Matplot++原创 2024-05-13 09:55:25 · 424 阅读 · 1 评论 -
Vtk实现DCM转PNG
通过获取到的vtkImageData数据,将其转换为通用图像数据,通过QImage可以实现转存为其支持的任何格式。转载 2023-02-28 11:23:16 · 327 阅读 · 0 评论 -
GDB调试-从入门实践到原理
转载自:CPP开发者背景作为C/C++开发人员,保证程序正常运行是最基本也是最主要的目的。而为了保证程序正常运行,调试则是最基本的手段,熟悉这些调试方式,可以方便我们更快的定位程序问题所在,提高开发效率。在开发过程,如果程序的运行结果不符合预期,第一时间就是打开GDB进行调试,在对应的地方设置断点,然后分析原因;当线上服务出了问题,第一时间查看进程在不在,如果不在的话,是否生成了coredump文件,如果有,则使用gdb调试coredump文件,否则通过dmesg来分析内核日志来查找原因。概念转载 2022-04-22 14:55:06 · 4842 阅读 · 0 评论 -
CreateTimerQueueTimer精度问题 本地时间戳
在windows平台上使用 CreateTimerQueueTimer定时器时,需要将精度设置到1-2 ms的时间,但是CreateTimerQueueTimer的执行时间片在15ms左右,后来无意间找到一篇文章原来是微软故意这么干的,他觉得设置精度到毫秒级别,太耗费资源了,如果是移动设备,频繁唤醒切换线程,电池消耗得很快。于是微软宁肯抛弃强兼容性传统,也坚决让这函数失效。悲催啊!性能问题,你这样搞就很扯淡呀微软!!!!!!...原创 2021-11-29 16:24:28 · 967 阅读 · 0 评论 -
Qemu-spice云桌面创建
Spice是一个开放的远程计算解决方案,提供客户端访问远程显示和设备(如键盘、鼠标、音频)。主要的用例是获得对虚拟机的远程访问。官网:SpiceQemu-Spice框架Spice的基本构建模块:Spice Server: Spice Server是在libspice中实现的,libspice是一个VDI可插拔库。目前,这个库的主要用户是QEMU。 QEMU使用Spice -server通过Spice协议提供对虚拟机的远程访问。虚拟设备接口(Virtual Device Inte原创 2021-09-14 16:57:25 · 3519 阅读 · 0 评论 -
Windows下主线程等待子线程任务完成防止阻塞的方式
@线程同步方式用户模式:WaitForMultipleObject内核模式:MsgWaitForMultipleObjects用户模式的线程同步机制效率高,如果需要考虑线程同步问题,应该首先考虑用户模式的线程同步方法。但是,用户模式的线程同步有限制,对于多个进程之间的线程同步,用户模式的线程同步方法无能为力。这时,只能考虑使用内核模式。一般情况下,主线程创建子线程后(优先使用_beginthreadex),使用WaitForSingleObject(hThread, INFINITE);等待子原创 2021-08-23 14:35:20 · 1124 阅读 · 0 评论 -
二级指针使用注意事项
二维数组与二级指针的使用给,数组只能处理特定数量的数据,局限性较大。二级指针可以看作是一个数组,申请内存方式如下: char** disk = (char**)malloc(sizeof(char*)*5); for (size_t i = 0; i < 5; i++) { disk[i] = (char*)malloc(sizeof(char) * 260); memset(disk[i],0, 260); } int test(char** _str, int k) {原创 2021-08-18 15:36:18 · 146 阅读 · 0 评论 -
Mingw64编译跨平台程序时,_stat函数对于Windows中文路径不支持
通过Mingw64交叉编译Windows程序时,会经常为了适配使用到一些C库的函数,但是Windows平台相较于Linux平台对于C库的函数支持性有一定的差距!在做文件系统时,当获取文件、目录的详细信息时,会使用的stat函数,该函数再Linux环境下没有什么使用的问题,但是再Window环境下,对于 char*字符串中带的中文路径支持度不够,适配跨平台时,需要使用_wstat64宽字节函数对应!解决该问题! char u8str[] = u8"D://你好你好"; WCHAR uni_buf[MAX原创 2021-08-17 14:32:11 · 918 阅读 · 0 评论 -
Windows平台文件操作
Windows平台文件操作函数创建打开文件CreateFileHANDLE CreateFile( LPCTSTR,lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, L原创 2021-07-07 15:53:21 · 472 阅读 · 0 评论 -
windows下VSCode+Mingw+CMake编译开发环境搭建
亲测有效在windows上安装Mingw(https://zhuanlan.zhihu.com/p/66197013)也可以下载免安装版,也可以下载codeblock的mingws版本,里面也有Mingw.Mingw:链接:https://pan.baidu.com/s/1xUHR1Mz76sWuyacTQgGi1g提取码:k5qu还有mingw-forQt5版本链接:https://pan.baidu.com/s/1Pz1dWWErHMvSVG7zpTwIDA提取码:besvCmak.原创 2020-11-07 13:19:20 · 797 阅读 · 0 评论 -
Ubuntu下VSCode+Cmake配置开发环境
步骤一:打开vscode,创建一个空文件夹,并作为工作区。步骤二安装插件:1. Bracket Pair Colorizer:括号颜色区分2. C/C++ IntelliSense :代码提示3. Chinese (Simplified) Language Pack for Visual Studio Code :中文界面4. One Dark Pro :主题插件5. cmake:CMake langage support for Visual Studio Code6. CMake To原创 2020-11-07 11:49:04 · 2067 阅读 · 0 评论 -
STL常用容器详解
容器部分主要由头文件<vector>, <list>, <deque>, <set>, <map>, <stack> 和<queue>组成。 对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下表总结 1.序列容器--->元素都有固定位置和顺序,取决于插入时间和地点 vector、deque、list 2.关联式容器--->元素位置取决于特定...原创 2020-09-07 15:02:41 · 714 阅读 · 0 评论 -
使用工厂模式避免令人厌烦的可优化的if-else
在我们写代码时,经常会有一些业务需要去区分类型,一种各类型做一个业务,然后去使用N多个if-else来区分这些不同的业务走向。比如一个Service类,里面有N种类型,但是这N种类型都有相似的操作,只是因为类型或者某些特定的操作需要被区分。尽管if-else在代码中是必不可少的,但是这种N多的if-else if-else会使人最后看到代码有想吐的感觉,在后续业务功能扩展时,也是在上面无情的添加else -if-else,最后反过头在来看这些代码,有一种低能儿的感觉。简直能让人爆炸。在学习的道路上不断地前进原创 2020-09-01 15:34:20 · 424 阅读 · 0 评论 -
C++11 新特性学习笔记
变长参数实例 __VA_ARGS__ 替换省略号代表的字符串#define LOG(...){\ fprintf(stderr,"File: %s ,Func: %s ,Line: %d\t",__FILE__,__FUNCTION__,__LINE__);\ fprintf(stderr,__VA_ARGS__);\ fprintf(stderr,"\n");\}//TestLOG("Msg:%s", "I am error");断言assert断言是在运行期进行验证,适用于De.原创 2020-08-14 15:34:25 · 350 阅读 · 2 评论 -
Windows修改注册表、查询注册表、查询注册表Key Value
Windows平台查询、修改注册表的方式如下:已测.h文件#pragma once#include <iostream>//#include <Windows.h>#include <afx.h># include <stdio.h># include <tchar.h># include <locale.h>#include <time.h> #include <fstream> #.原创 2020-07-07 10:41:28 · 1174 阅读 · 0 评论 -
Qt5调用MFC ActiveX插件接口
Qt5中提供了调用ocx插件接口的方法,也提供了自己的插件开发方法QtActiveX的方式来开发插件。本博客仅说明在使用Qt5调用MFC的插件接口的方法。在windows系统中,打开盘符“C:\Program Files (x86)\Windows Kits\8.1\bin\x86或者 C:\Program Files (x86)\Windows Kits\8.1\bin\x64”找到程序 oleview.exe ,并以管理员模式打开该运行程序。如下图: 打开上述软件后,点击工具栏文件夹边上的.原创 2020-06-01 10:50:34 · 1495 阅读 · 0 评论 -
设计模式学习笔记-----单例模式
为什么使用单例模式大规模系统中,为了性能的考虑,需要节省对象的创建时间等等。因为Singleton模式可以保证为一个类只生成唯一的实例对象,所以这些情况,Singleton模式就派上用场了。比如使用Socket时,只需要一个Socket对象即可,这时候单例模式就有实战之地了。 实现单例步骤常用步骤 构造函数私有化 提供一个全局的静态方法(全局访问点) 在类中定义一个静态指针,指向本类的变量的静态变量指针 单例模式分类懒汉式、饿汉式懒汉式单例模式普通写法 单线程..原创 2020-05-20 16:30:34 · 249 阅读 · 0 评论 -
cef3资源重定向,url请求拦截并附可运行Demo
cef3资源重定向,继承Provider并实现OnRequest,由于之前项目中使用到了libcef,但是之前的同事写的代码有问题,不能够在MFC Dialog中有效的拦截到对应的URL的请求,也无法监听到,网上的资料大部分都是模糊不清,给大家的误导也是挺大的,所以打算写一个Demo,让大家少点时间去搜索,不过还是建议多看源码,源码中的Demo对于libcef的使用有挺多的启发。Demo地址:Demo链接地址...原创 2020-05-14 16:12:09 · 1886 阅读 · 0 评论 -
数据结构 数据表 学习笔记
数据结构学习笔记线性表概念全名为线性存储结构。使用线性表存储数据的方式可以这样理解,即“把所有数据用一根线儿串起来,再存储到物理空间中”分类将数据依次存储在连续的整块物理空间中,这种存储结构称为顺序存储结构(简称顺序表)数据分散的存储在物理空间中,通过一根线保存着它们之间的逻辑关系,这种存储结构称为链式存储结构(简称链表)顺序表概念顺序表对数据的物理存储结构也有要求。顺序表存储数...原创 2020-03-03 16:59:44 · 384 阅读 · 0 评论 -
windows平台 VS2017 live555 rtsp推流服务器编译
live555 rtsp拉流方式下载live555源码:http://www.live555.com/1.采用VLC播放,需要协议格式 :rtsp://IP/<filename>例如: rtsp://192.168.100.73/文件全名称编译windows版本推流服务器mediaServer1----需要四个文件夹内的内容BasicUsageEnviro...原创 2019-12-06 16:53:46 · 915 阅读 · 0 评论 -
C++写二进制数据到文件中
一个简单的写入二进制数据的方法。FILE *fp = fopen("要写入的文件名", "w");if (fp == NULL) return;fwrite(二进制data, sizeof(数据类型), 数据长度, fp);if (!data) fclose(fp);原创 2017-08-29 14:51:40 · 1789 阅读 · 0 评论 -
C++ const修饰成员变量、成员函数的位置不同代表的意义
const限定符const修饰指针的几种情形1.常量指针 const 类型 * 指针名 等价于 类型 const * 指针名 const int *p1=&a //不可以用*p改变a的值 int a=10; int b=3; *p1=11 //错误,因为p1指向的内容是a的值10,此处*p1=11相当于修改a的值错误,但是a...原创 2019-04-18 16:21:21 · 1040 阅读 · 0 评论 -
pthread学习使用
使用多线程的优点:众所周知创建一个线程的开销远比创建一个进程的开销要小的多.启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所...原创 2019-04-18 16:15:38 · 522 阅读 · 0 评论 -
C++ 基于TCP的Socket网络通信 客户端 服务端
在学习TCP UDP过程中使用 VS 2015时遇到这个问题,并附上解决方案error :'inet_addr': Use inet_pton() or InetPton() instead or ...VS 2015 ->project->Properties->c/c++->General->SDL check->No ------bingo以下...原创 2019-04-18 16:13:49 · 729 阅读 · 0 评论 -
C++ 11 STL智能指针的基本使用
在C++中解决内存泄漏的有效方法是使用智能指针(Smart Pointer)。智能指针和普通指针的用法类似,只是不需要手动释放内存,而是通过智能指针自己管理内存释放。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保在离开指针所在作用域时,自动正确的销毁动态分配的对象,防止内存泄漏。它的一种通用实现技术是使用引用计数,每使用它一次,内部的引用计数加1,每析构一次,内部引用计...原创 2019-04-18 16:11:34 · 1769 阅读 · 0 评论 -
Linux系统下pthread实例详解
linux中C/C++开发多线程程序多遵循POSIX线程接口也就是pthread。 pthread涉及函数很多个(参见pthread.h头文件) 常用的有pthread_create、pthread_dispath、 pthread_mutex_lock(互斥锁定)、pthread_mutex_unlock(互斥解锁)等。 入门而言,先把线程创建出来,然后编译通过之后再慢慢完善, 具体步...原创 2018-08-08 15:31:55 · 3273 阅读 · 0 评论 -
把Vim打造成优秀的C++ IDE
对于Windows上做C++开发的用户来说,vs为他们做了大量的工作,语法高亮、自动缩进、智能提示等等,当你happy的使用vs时,请记住一点,这是一个收费软件,虽然在我大中华普遍都在使用微软的盗版软件,但作为程序员我们心里应该知道这是不对的行为,然后再去——等等,我们今天讨论的不是这个话题,我们要说的是Linux下的免费软件Vim!Vim插件安装的教程在互联网上已经数不胜数,但是质量也参差不...转载 2018-03-07 17:12:30 · 1790 阅读 · 2 评论 -
OpenCV学习第二篇之加载图像
从磁盘加载一张图片到前台窗口案例#include "pch.h"#include <iostream>#include "highgui.h"#include <opencv2/opencv.hpp>using namespace cv;int main(int argc, char** argv){ //方式一 网上例子 //读入一...原创 2019-05-05 22:28:20 · 208 阅读 · 0 评论 -
OpenCV学习第二篇之读取视频
根据书上的案例读取一个AVI格式的视频。播放视频遇到的问题:用cvCreateFileCapture()读取视频文件,本来看是一个很普通的问题,但遇到播放不出画面时总让人纠结。今天用此函数读取视频文件,总是灰屏闪退。仔细查看问题,发现此函数对视频读取颇为苛刻。要和本机的解码器相匹配。首先下载XviD codec解码器http://www.xvidmovies.com/codec/,...原创 2019-05-09 21:08:03 · 443 阅读 · 0 评论 -
C++智能指针与内存泄漏之间的联系
在C++中解决内存泄漏的有效方法是使用智能指针(Smart Pointer)。智能指针和普通指针的用法类似,只是不需要手动释放内存,而是通过智能指针自己管理内存释放。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保在离开指针所在作用域时,自动正确的销毁动态分配的对象,防止内存泄漏。它的一种通用实现技术是使用引用计数,每使用它一次,内部的引用计数加1,每析构一次,内部引用计...原创 2019-07-10 15:57:48 · 1617 阅读 · 0 评论 -
pthread 线程基础使用方式案例讲解
使用多线程的优点:众所周知创建一个线程的开销远比创建一个进程的开销要小的多.启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切...原创 2019-07-10 16:21:19 · 673 阅读 · 0 评论 -
MFC 字符转换汇总
CString 转 string#include <atlconv.h>USES_CONVERSION;dstStr=T2A(srcStr.GetBuffer(0));string 转 CStringCString pChar2CStr(const char* pChar){ std::string curLocale = setlocale(LC_ALL...原创 2019-08-02 11:32:17 · 309 阅读 · 0 评论 -
Jsoncpp 简单使用
首先现在Jsoncpp的源码进行编译,下载地址:JsonCPP下载成功后进入makefiles文件夹就有Windows的编译工程,就可以编译自己的库。使用案例:std::wstring strStl = srcStr;Json::Features features = Json::Features::strictMode();Json::Reader reader( featur...原创 2019-08-02 13:56:35 · 563 阅读 · 0 评论 -
C++常用知识点汇总
一、const,&: When:实参与const引用参数不匹配时,编译器将创建临时变量? 1、实参的类型正确,但不是左值; 2、实参类型不正确,但可转换为正确类型。 Why:引用形参尽可能声明为const? 1、可以避免无意中修改数据; 2、使函数能够处理const和非const实参;...原创 2019-09-25 10:09:02 · 700 阅读 · 0 评论 -
Windows C++ 四种线程同步的创建与使用方式
1.互斥量 /* *用于保护全局变量、硬件端口、管道识别码、窗口客户区 *多个线程共享资源时,优先考虑互斥量 *Mutex 可以跨进程使用,所以其名称对整个系统而言是全局的 *param1:安全特征,可以指定,也可以不填 *param2:线程所有权,设置为TRUE,调用方立即获得互斥量所有权 *param3:互斥量名称必须指定 ...原创 2019-09-28 15:40:05 · 295 阅读 · 0 评论 -
C++之String类函数原型
【代码】C++之String类函数原型。原创 2018-01-09 11:07:13 · 2197 阅读 · 2 评论 -
关于faac的一点使用方式
在工作中使用faac时,不太理解,jni层调用时一直出错,发现最后是使用方式的问题关于FAACFAAC是一个MPEG-4和MPEG-2的AAC编码器,其特性是:可移植性好,快速,支持LC/Main/LTP,通过Dream支持DRM,代码小相对于FFMPEG的AAC转码,FAAC实在是微乎其微,而且可以直接把代码加到工程里面编译,也可使用静态库,而没有巨大的动态库的烦恼。转载 2017-11-30 17:00:57 · 3150 阅读 · 0 评论 -
运算符重载详解
1.运算符重载定义:C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运原创 2017-11-09 11:47:17 · 354 阅读 · 0 评论 -
NULL、0、nullptr 区别分析
C的NULL在C语言中,我们使用NULL表示空指针,也就是我们可以写如下代码:int *i = NULL;foo_t *f = NULL;实际上在C语言中,NULL通常被定义为如下:#define NULL ((void *)0)也就是说NULL实际上是一个void *的指针,然后吧void *指针赋值给int *和foo_t *的指针的时候,隐式转换成相应的转载 2017-11-08 20:01:47 · 261 阅读 · 0 评论 -
手把手教你调试Linux C++ 代码
手把手教你调试Linux C++ 代码软件调试本身就是一项相对复杂的活动,他不仅要求调试者有着清晰的思路,而且对调试者本身的技能也有很高的要求。Windows下Visual Studio为我们做了很多的工作,使初学者基本上可以获得一个所见即所得的调试体验,相对来说也比较容易上手。然而在linux平台下,一切都显得有些不同,倒不是说GDB有多难,只是对于习惯了visual studio的人来说刚转载 2017-09-21 17:59:05 · 623 阅读 · 0 评论