C/C++
文章平均质量分 70
奔跑的大伟哥
这个作者很懒,什么都没留下…
展开
-
c++ 宏定义日志输出
以下在linux下测试有效#include <stdio.h>#include <time.h>#include <chrono>using namespace std;static const char* tag = "main";static const char tag_debug = 1;static const char tag_user_milli_sec = 0;#define LOG (printf("%s (%d) - <%s&原创 2021-03-31 15:28:51 · 1402 阅读 · 0 评论 -
DirectShow实现USB相机预览和抓图例子(使用ICaptureGraphBuilder2)
关键概念:filterfilter graphfilter graph managerfilter interface (COM interface)filter Pin(输入输出端子)Pin Property及Pin MediaType系统设备枚举用于选择设备GraphEdit工具使用Video Capture及ICaptureGraphBuilder2使用视频采集设备、VFW和WDM及KsProxy使用驱动自带的设置窗口控制设备及视频设置IAMStreamConfig:设置帧率、原创 2020-11-27 12:16:19 · 2681 阅读 · 2 评论 -
DirectShow实现USB相机预览和抓图例子(手动构建filter链)
// show.cpp/** * 纯手工打造构建filter graph,实现视频预览和抓图 * * filter graph链路图: * video device(KsProxy) filter [OUT capture pin] --> [IN input pin] smart tee filter [OUT capture pin] --> [IN input pin] sample grabber filter [OUT output pin] --> [IN inpu原创 2020-11-27 12:16:04 · 1093 阅读 · 0 评论 -
DirectShow笔记
DirectShow是Windows平台的流媒体框架。CrossBar:a device might have multiple inputs,such as S-Video and composite video,The CrossBar filter enables the application to select the input.CrossBar可以在多路输入之间切换输入。device pin:设备引脚filter通过设备引脚连接,但是数据不是通过引脚连接移动。1. DirectSho原创 2020-11-27 12:15:35 · 636 阅读 · 0 评论 -
DirectShow图像和相机设置
参考:Configure the Video Quality - DirectShow图像质量设置逆光补偿亮度对比度色调饱和度清晰度伽马白平衡增益相机控制缩放调焦曝光光圈全景倾斜滚动低照度补偿 // 视频质量设置 IAMVideoProcAmp *pProcAmp = NULL; HRESULT hr = pDevFilter->QueryInterface(IID_IAMVideoProcAmp, (void **)&pP原创 2020-11-27 12:15:22 · 2227 阅读 · 1 评论 -
C++虚析构函数及delete操作分析
关键字:scalar deleting destructor、虚表通常我们在写一个基类的时候,若基类成员变量需要动态申请内存空间或基类成员变量引用了系统资源时,需定义类的析构函数来明确在删除对象时需要释放的成员。1. 析构函数析构函数在析构时调用。若在堆上申请的内存,则不需要调用delete释放内存,只需要调用析构函数。1.1 析构函数与delete在堆上申请的内存需要delete删除对象。在删除对象时既要执行析构又要释放内存。class A{public: ~A(){}};int m原创 2020-10-30 12:22:44 · 7120 阅读 · 0 评论 -
C++异常处理
《C++ primer》第五版 18.1 异常处理原创 2020-10-28 14:11:03 · 186 阅读 · 0 评论 -
C++左值右值与右值引用
本文总结 C++ 左右值的定义,和 C++11 中右值引用的用途转载:C++11新特性3 - 左右值与右值引用C++ 11: Rvalue Reference – Move SematicsC++ 11: Rvalue Reference – Fowarding1. 左值与右值C++ 中,左右值的简化定义:左值:占用了一定内存,且拥有可辨认的地址的对象右值:左值以外的所有对象典型的左值,C++中绝大部分的变量都是左值int i = 1; // i 是左值int *p = &am原创 2020-10-27 09:50:37 · 517 阅读 · 1 评论 -
C++名字查找
在学习C++一开始,我们就知道在使用类型、变量和函数时需要先定义。名字查找的过程比较直截了当:首先,在名字所在的块中寻找其声明语句,而且只找名字使用之前出现的声明如果没有找到,继续查找外层作用域如果最终没有找到匹配的声明,则程序报错当然,对于定义在类内的成员函数中的名字与上述的查找规则有所区别,类的定义分两步处理:首先,编译成员的声明直到类全部可见后,才编译函数体。成员函数中使用的名字按照如下方式解析:首先,在成员函数内查找该名字的声明,只有在函数使用前出现的声明才被考虑若成员函原创 2020-10-23 12:43:57 · 1578 阅读 · 0 评论 -
thrift源码分析(四)TProtocol数据编码协议实现与CRTP
TProtocol是Thrift数据序列化和反序列化的工具类,与Google的ProtocolBuffer类似。1. Thrift TProtocol介绍可接受的数据类型实现了的序列化格式Thrift中实现了多种序列化格式:– TBinaryProcotol:自定义的二进制格式– TJSONProtocol:JSON2. TVirtualProtocol和TProtocolDefaults的源码分析在看完TVirtualProtocol和TProtocolDefaults后,我觉得这两个原创 2020-10-21 16:30:40 · 1803 阅读 · 1 评论 -
操作系统文件管理及IO机制
1. 硬盘磁盘参数:磁头磁柱/磁道扇区(磁盘读写的最基本单位)扇区大小(常见的有512byte,4096byte)磁盘大小计算:磁头数 x 磁道数 x 扇区数 x 扇区大小2. 文件系统文件系统有多种格式:FAT32、NTFS等等操作系统中文件读写以簇(windows)或块(linux)为单位分配磁盘空间,通常一个簇/块由多个扇区组成。一个扇区只属于一个簇/块,一个簇/块只能由一个文件占用,一个文件可能占用多个簇/块。所以有时候我们看到一个文件,不管写1000还是2000个字节,占用原创 2020-09-29 11:24:27 · 992 阅读 · 0 评论 -
c#调用c++接口笔记
c#调用c++的函数在想通了之后就不难了,说是函数调用,其实就是参数传递的过程。只要能理解c#和c++中数据在内存中的存放形式,再奇葩的函数都不会有问题了。通常c++导出的接口都是extern c形式,即c语言形式接口。1. C++函数中的常见类型传递方式1.1 内置类型intshortchar内置类型通常有固定大小的内存,只需要在c#中找到对应的固定大小类型即可。1.2 数组/指针类型int i[100]char*void*数组或指针传递的都是地址,在接收时有多种方式:原创 2020-09-23 11:33:25 · 1860 阅读 · 2 评论 -
c++ RAII的理解
RAII:Reource Acquisition Is Initializetion(资源获取即初始化),是利用C++类对象的生命周期管理资源的一种方式(包括:分配的堆内存、线程资源、socket、打开的文件、锁、磁盘空间、数据库连接等)。这种技术的另一个名称是SBRM(作用域绑定资源管理),RAII对象的生命周期由于作用域退出而结束。RAII可以总结如下:将每个资源封装到一个类中构造函数获取资源并创建类的所有变量,若不能完成则抛出异常析构函数释放资源同时不能抛出异常始终通过RAII类的实原创 2020-09-14 10:49:52 · 349 阅读 · 0 评论 -
c/c++中入栈顺序
c/c++中的都是从右往左入栈的,在调用函数时,若参数需要运算则先运算,然后入栈,再调用函数。分析下面代码的运算结果:int main(){ /* 1. 入栈顺序,参数从右往左入栈 2. 计算顺序,先入栈的先计算;计算完后再入栈 3. 传递的参数:实际变量,还是临时变量 */ int i=1; // 先计算,两次i++后i的值为3;传递的是实际变量i的值 printf("%d,%d\n", ++i, ++i); //3,3 // i+原创 2020-09-10 20:09:12 · 6228 阅读 · 6 评论 -
C++类型转换
C++中有多种类型转换方式:强制类型转换static_castdynamic_castreinterpret_cast1. 强制类型转换想怎么转就怎么转,随便转,随心所欲的转:class A{}class B{}int main(){ A a; B *b = (B *)&a; // 这也可以转 int a1 = 100; void *p1 = (void *)&a1; char *p2 = (char *)&a1;原创 2020-07-21 12:23:40 · 1924 阅读 · 0 评论 -
volatile的两个作用
volatile的两个作用:线程可见性内存屏障,保证指令不重排序volatile与线程可见性保证写后数据马上回写到系统内存写后通知其他CPU缓存数据过期,其他CPU读时需从内存中读取不能保证i++的原子性,即使声明了volidatevolidate int i ; i++应看成三个原子操作:1)从内存读取i至寄存器2)i自增13)写入i,回写到系统内存,通知CPU缓存过期volatile与cachelinevolatile为了保证线程可见性,每次修改volatile变量后都需原创 2020-05-15 14:30:52 · 648 阅读 · 1 评论 -
在vc++中使用vector后release版本的dll被debug的exe调用后出现异常
问题描述:生成的dll接口使用了std::vector,调用dll的程序与dll不是发布版本(dll是release,exe是debug;或dll是debug,exe是release),出现vector调用异常。项目代码链接:vcpp-vector-exportdll导出接口:struct Key{ char * key; int keySize;};/* 设备日志回调 */...原创 2020-04-15 09:34:24 · 760 阅读 · 0 评论 -
使用C#与GO语言开发高性能且安全的Windows桌面应用程序
在Windows上开发桌面应用程序最快的方式无疑是使用C#,前有WinForm现有WPF,都是很好的开发框架,不管是MFC还是QT总还是复杂了一些。但是C#有一个最最大的缺点,就是没办法避免反编译,虽然我也经常反编译别人程序,但是绝不愿意看到自己的程序被别人反编译。曾经我考虑过用C/C++做核心的功能,界面用C#做。虽然也是一种办法,但是C/C++还是麻烦了一些,而且在部署时,需要同时安装.NE...原创 2020-03-12 17:18:25 · 5580 阅读 · 0 评论 -
c++ traits编程/基于特性的泛型模板编程
/** * traits编程的精髓: * 1. 在不同类中定义不同类型但是同名的别名 * 2. 函数使用不同类型重载,此类型不做任何传参,只用于重载区分 * 3. 定义一个对外的函数,内部获取输入类的类型区分别名,使用此别名类型创建对象,调用实际的重载函数 * * traits编程还可以用于函数返回值的定义,因为c++无法像java和c#那样反射,可通过traits技法实现 ...原创 2020-01-18 09:49:22 · 440 阅读 · 0 评论 -
c++ lamdba表达式
语法形式:[函数对象参数] [(表达式参数)] [mutable/exception声明] [->返回值类型] {函数体}/** * c++ lambda表达式 * * 语法形式:[函数对象参数] [(表达式参数)] [mutable/exception声明] [->返回值类型] {函数体} * * 1. 函数对象参数 * [] :无参数 * [=] :值传...原创 2020-01-16 11:39:09 · 279 阅读 · 0 评论 -
vscode+msvc调试c++程序
1. 打开vs工具命令提示我的在文件夹C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts中:选行x86或其他几个都行,双击运行2. 执行code打开vscode3. 配置settings.json{ "terminal.integrated.shell.windows": "C...原创 2020-01-13 19:41:36 · 2772 阅读 · 0 评论 -
do{...}while(0)的应用
参考:《do{…}while(0)的妙用》1. 帮助定义宏在看redis源码时,发现很多宏都用了do{…}while(0),例如在zmalloc.c中用于统计内存使用量时的宏:#define update_zmalloc_stat_add(__n) do { \ pthread_mutex_lock(&used_memory_mutex); \ used_memor...原创 2019-12-03 12:24:59 · 197 阅读 · 1 评论 -
vscode+wsl调试c++程序
1. 在wsl中打开vscode进入wsl,找到程序目录,在目录下打开vscode> cd /mnt/d/vscode/> code .ok,打开了vscode,并且进入了wsl。在vscode的左下角可以看到:2. 在vscode中配置c++环境创建main.cpp文件:#include<stdio.h>int main(){ int ...原创 2019-11-26 15:32:29 · 4221 阅读 · 0 评论 -
C结构体中的位域
之前没发现,竟然有这么个东西。一般存储数据都是以byte为单位,如果要表示0或1,最小也只能用char;但char占用了8个bit,有7个是浪费的。下面写代码,看看位域是什么东西:// sizeof : 4typedef struct bit_filed{ // 定义使用1个bit的位域 unsigned a : 1; int b : 1;};sizeof一下这...原创 2019-11-25 20:26:58 · 305 阅读 · 0 评论 -
cmake笔记
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件cmake可根据CMakeLists.txt文件生成vs工程和makefile文件(通过-G 设置输出生成的文件类型)注意:本文使用vscode,使用nmake在vc++2013环境下测试。参考:Cmake 详解1. 基本语法# 运行...原创 2019-11-21 20:41:57 · 218 阅读 · 0 评论 -
COM编程入门
文章目录1. COM组件介绍2. COM组件开发2.1 创建COM组件接口2.2 创建COM组件实现类2.3 COM组件创建工厂2.4 COM组件的注册3. COM组件使用4.0 COM组件运行机制1. COM组件介绍COM组件是什么?COM是一种规范,而不是实现。但是当使用C++来实现时,COM组件就是一个C++类,而COM接口就是继承至IUnknown的纯虚类,COM组件就是实现相应C...原创 2019-10-29 15:40:20 · 34917 阅读 · 3 评论 -
Windows API笔记(六)内存映射文件
Windows API笔记(一)内核对象Windows API笔记(二)进程和进程间通信、进程边界Windows API笔记(三)线程和线程同步、线程局部存储Windows API笔记(四)win32内存结构Windows API笔记(五)虚拟内存Windows API笔记(六)内存映射文件Windows API笔记(七)堆Windows API笔记(八)文件系统Windows A...原创 2019-05-08 10:50:54 · 1786 阅读 · 0 评论 -
Unix编程笔记(二)标准I/O库
标准I/O库由ISO C标准说明,很多操作系统都实现了标准I/O库。标准I/O库处理很多细节,如缓冲区分配、以优化的块长度执行I/O等。这些处理使用户不必担心如何选择使用正确的块长度。1. 流和FILE对象2. 标准输入、标准输出和标准错误3. 缓冲4. 打开流5. 读和写流6. 每次一行I/O7. 标准I/O的效率8. 二进制I/O9. 定位流10. 格式化I/O11. ...原创 2019-04-28 23:34:27 · 319 阅读 · 0 评论 -
Unix编程笔记(一)文件I/O
文件I/O文件描述符、传递文件描述符标准I/O进程、进程间通信线程、线程同步信号原创 2019-04-27 19:16:49 · 179 阅读 · 0 评论 -
Log4cpp输出日志到Kafka
最近的项目需要做一个生物识别的分布式比对服务,在机器集群上如何做日志汇总和分析?ELK很不错,但是公司原来都是使用Log4cpp,能不能在改动最小的情况下,将日志输出到ELK?当然没有问题,Logstash有可以从kafka输入,只需要实现日志输出到kafka,剩下的ELK配置好就ok!但是Log4cpp并没有提供kafka输出,自定义一个即可!文章目录1. 下载Log4cpp2. 编码2.1...原创 2019-04-25 19:00:18 · 753 阅读 · 0 评论 -
MPI笔记(七)计算圆周率
/*计算Π的值*/#include <stdio.h>#include "mpi.h"#include <iostream>using namespace std;#define N 1000000void pi(){ double local, pi = 0.0, w; int n = N; long i; w = 1.0 / N; fo...原创 2019-04-16 19:09:20 · 3751 阅读 · 0 评论 -
MPI笔记(六)虚拟拓扑
/*虚拟拓扑: 1. 主要的拓扑结构:笛卡尔和图 2. 虚拟拓扑建立在组和通信因子之上 MPI_Cart_coords (comm,rank,maxdims,*coords[]) : 笛卡尔转换函数,把进程秩转换成坐标 MPI_Cart_create (comm_old,ndims,*dims[],*periods, reorder,*comm_cart) : 根据笛卡尔拓扑信息创建一...原创 2019-04-16 19:08:04 · 4262 阅读 · 0 评论 -
windows查看dll依赖项,QT打包依赖库
利用vs查看c++ dll依赖库c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>dumpbin /dependents F:\econDe.exeQt打包C:\Qt\Qt5.7.0VS2015\5.7\msvc2015\bin>windeployqt.exe xxx.exe原创 2017-11-30 13:54:22 · 1947 阅读 · 0 评论 -
Windows API笔记(七)堆
在Win32中操作内存的第3种方法是使用堆。堆非常适合于分配很多小块的数据。例如,使用堆来管理链表和树要比使用虚拟内存或内存映射文件好很多。堆的特性:堆是属于进程的,一个进程的堆种的内容不能被其他进程种的线程访问在通常的程序中,很多数据默认存放在缺省堆,例如:new、malloc等申请的内存空间堆是虚拟内存上的一种特殊内存管理方式dll没有自己的堆,它使用的堆是进程地址空间的一部分...原创 2019-05-08 10:51:05 · 781 阅读 · 0 评论 -
Windows API笔记(十一)设备I/O
常见设备和用处:设备常见的用处文件任意数据的持久化存储目录属性和文件压缩逻辑磁盘格式化物理磁盘分区表访问串行口通过电话线传输数据并行口向打印机传输数据邮件槽一对多的传输数据,通常通过网络向一台Windows机器传输命名管道一对一的传输数据,通常通过网络向一台Windows机器传输无名管道在同一机器上一对一的传输...原创 2019-05-05 17:40:00 · 1152 阅读 · 0 评论 -
Windows API(四)Win32 内存结构
1. 进程的地址空间进程创建时系统分配4G的地址空间。1.1 Windows如何划分进程的地址空间范围大小作用说明0x00000000 - 0x0000FFFF64KB用于NULL指针分配,不可访问NULL指针区域,师徒读写这一分区中内存地址将会引起访问冲突0x00010000 - 0x7FFEFFFF2GB - 64K - 64KB属于Win 32进...原创 2019-05-06 16:30:50 · 1644 阅读 · 0 评论 -
Windows API笔记(五)管理虚拟内存
Windows API笔记(一)内核对象Windows API笔记(二)进程和进程间通信、进程边界Windows API笔记(三)线程和线程同步、线程局部存储Windows API笔记(四)win32内存结构Windows API笔记(五)虚拟内存Windows API笔记(六)内存映射文件Windows API笔记(七)堆Windows API笔记(八)文件系统Windows A...原创 2019-05-08 10:44:48 · 2339 阅读 · 0 评论 -
Windows API笔记(九)窗口消息
Windows API笔记(一)内核对象Windows API笔记(二)进程和进程间通信、进程边界Windows API笔记(三)线程和线程同步、线程局部存储Windows API笔记(四)win32内存结构Windows API笔记(五)虚拟内存Windows API笔记(六)内存映射文件Windows API笔记(七)堆Windows API笔记(八)文件系统Windows A...原创 2019-05-28 19:59:08 · 1406 阅读 · 0 评论 -
Windows API笔记(十)动态链接库
Windows API笔记(一)内核对象Windows API笔记(二)进程和进程间通信、进程边界Windows API笔记(三)线程和线程同步、线程局部存储Windows API笔记(四)win32内存结构Windows API笔记(五)虚拟内存Windows API笔记(六)内存映射文件Windows API笔记(七)堆Windows API笔记(八)文件系统Windows A...原创 2019-05-28 20:17:43 · 1045 阅读 · 0 评论 -
Windows API笔记(三)线程同步
Windows API笔记(一)内核对象Windows API笔记(二)进程和进程间通信、进程边界Windows API笔记(三)线程和线程同步、线程局部存储Windows API笔记(三)线程同步Windows API笔记(四)win32内存结构Windows API笔记(五)虚拟内存Windows API笔记(六)内存映射文件Windows API笔记(七)堆Windows A...原创 2019-05-29 16:39:23 · 838 阅读 · 0 评论