自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 收藏
  • 关注

原创 Ubuntu下使用protoBuf

protobuf是用来干嘛的?protobuf是一种用于 对结构数据进行序列化的工具,从而实现 数据存储和交换。(主要用于网络通信中 收发两端进行消息交互。所谓的“结构数据”是指类似于struct结构体的数据,可用于表示一个网络消息。当结构体中存在函数指针类型时,直接对其存储或传输相当于是“浅拷贝”,而对其序列化后则是“深拷贝”。**序列化:**将结构数据或者对象转换成能够用于存储和传输的格式。**反序列化:**在其他的计算环境中,将序列化后的数据还原为数据结构和对象。

2023-11-24 17:47:54 2092

原创 C++中noncopyable不可拷贝类的使用

​ class noncopyable的基本思想是把构造函数和析构函数设置protected权限,这样子类可以调用,但是外面的类不能调用,那么当子类需要定义构造函数的时候不至于通不过编译。但是最关键的是****noncopyable把复制构造函数和复制赋值函数做成了private****,这就意味着除非子类定义自己的copy构造和赋值函数,否则在子类没有定义的情况下,外面的调用者是不能够通过赋值和copy构造等手段来产生一个新的子类对象的。指向了同一块的内存。被销毁,各自调用析构函数,由于他们的。

2023-11-17 17:17:53 351

原创 Google单元测试sample分析(四)

通过Water类来重写new和delete方法来实现记录内存分配/释放的情况,另外通过LeakChecker 继承自EmptyTestEventListener 并实现OnTestStart(测试用例开始前运行)和OnTestEnd方法(测试用例结束后运行)可以通过GoogleTest提供的事件侦听器EmptyTestEventListener 来实现,下面通过官方提供的sample例子,路径在samples文件夹下的sample10_unittest.cpp。

2023-10-30 13:59:42 466

原创 Google单元测试sample分析(三)

源码目录在googletest/googletest/目录下的prime_tables.h和sample6_unittest.cc。如下是Google Test框架中的Typed Test(带类型的测试)功能,在testing::Types命名空间中。以上代码中PrimeTableTest类继承自testing::Test,类内部定义个PrimeTable类型指针。如下Implementations是一个模板参数,它包含了两种实现的类型。本文介绍关于模版类该如何设置单元测试。

2023-10-30 11:33:09 327

原创 Google单元测试sample分析(二)

这里的QuickTest继承自testing::Test,并重写SetUp和TearDown方法,SetUp方法在每个TEST_F开始运行一次,退出执行TearDown方法一次。QueueTest类继承自QuickTest,并重写SetUp方法,在SetUp方法里调用QuickTest的父类方法,然后对Queue队列做初始化,q0_.Dequeue队列本来大小为0,出列的数据为nullptr。这个案例里记录整个TEST_F测试夹具的测试用例的运行时间。有关TEST_F测试夹具的使用案例。

2023-10-27 11:30:59 329

原创 Google单元测试sample分析(一)

/这里的STREQ是判断字符串内容,s为空类比较要使用nullptr。代码路径在googletest/googletest/samples/sample1.本文开始从googletest提供的sample案例分析如何使用单元测试,下面介绍sample2_unittest.cc文件。EXPECT_FALSE 是否为False。EXPECT_TRUE 是否为True。EXPECT_EQ 判断是否相等。本文件主要介绍EXPECT。

2023-10-27 11:01:01 385

原创 GoogleTest使用

然后删除测试夹具。多个TEST_F()拥有相互独立的个体,数据不会相互影响。案例2:继承自testing::Environment类。

2023-10-26 16:54:08 100

原创 linux系统安装Googletest单元测试框架

v1.10.x之后的版本有个坑需要看一下,cmake的时候会有问题,会在CMakelist.txt的127行附近报一个错,原因是下面语句中的GOOGLETEST_VERSION变量没有定义,需要手动加一下。编译完成会在googletest/build/lib目录下生成4个静态库文件,libgmock.a、libgmock_main.a、libgtest.a、libgtest_main.a。这样,如果你之前的gcc和google版本是匹配的,那么make应该就没有语法问题了,否则就是版本不匹配问题。

2023-10-24 17:41:35 709

原创 vector Autosar someip和vsomeip协议调试总结

虽然someip协议已经基本成熟,但有多个实现版本,现在使用较多的主要有,vector autosar配置的someip版本,以及网络开源的vsomeip版本;而someipd实现的someip sd协议是借助于udp的广播来发布或收集网络中的其他someip应用的相关信息的;这个首先要借助网络工具来抓包进行确认,是否可以在网络上抓取到相应的udp数据包,来检查是不是由于网络设置的原因造成的;由于某些特殊的原因,将autosar someip的主版本号设置为255可以与vsomeip 的0版本号相互发现;

2023-10-13 16:58:40 640 1

原创 python多线程

python多线程的4种实现方式。

2023-04-19 17:00:17 587 1

原创 chatGPT生成的一个简单QNX资源管理器的实现

这个demo创建了一个名为"my_resource"的资源管理器,并提供了两个请求:“lock"和"unlock”。当客户端发送"lock"请求时,它会锁定资源;当客户端发送"unlock"请求时,它会解锁资源。每个请求都会回复"OK"。不得不感叹于chatGPT的强大,下面是chatGPT生成一个QNX资源管理器的demo。

2023-04-14 16:29:25 234

原创 QNX系统基础

资源管理,就是posix提供的接口来管理资源。比如open文件、read/write文件resmgr本身是一个进程,在文件系统中注册了名字,其他进程就可以通过这个名字和该进程通信。比如串口进程,注册了一个/dev/ser1名字,其他进程就可以通过/dev/ser1和串口驱动通讯。我们看到的每一个设备节点都是一个resource manager\大家可以看到资源管理器在QNX上的重要,几乎所有的服务都是通过资源管理器来实现的。而且用资源管理器的概念,可以很好地模块化系统。

2023-04-14 14:09:47 2768

原创 互斥锁、自旋锁、原子操作的使用场景

假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被线程B所持有,那么线程A就会被阻塞,Core0会在此时进行上下文切换(Context Switch)将线程A置于等待队列中,此时Core0就可以运行其它的任务而不必进行忙等待。Spin lock(自旋锁)属于busy-waiting类型的锁,如果线程A是使用pthread_spin_lock操作去请求锁,那么线程A就会一直在Core0上进行忙等待并不停的进行锁请求,直到得到这个锁为止。3 、临界区竞争非常激烈。

2023-04-10 11:09:10 554

原创 C和C++程序互相调用方案

项目实际开发需求需要在C++程序中调用c语言实现的库,那么需要怎么实现呢?原理:C++函数为了支持函数重载,g++编译器会对函数名进行修饰,而C函数编译的符号表中只是函数名。同样的代码用C编译器(gcc)和C++编译器(g++)编译产生的函数名不同,导致C++连接找不到C语言的函数,所以C++程序中直接C函数是不能直接实现的,需要通过某种处理下面通过一个例子简单说明C++和C编译原理的不同之处上面源码用gcc编译。

2023-03-27 17:28:26 585

原创 python调用C&C++

Python调用C语言程序比较简单,将C语言程序编译好,再使用python中的ctypes模块调用即可。C语言源码called_c.c编译生成libpycall.so动态库文件,之后就可以在Python中调用foo函数运行既可以完成python中调用C程序。

2023-03-27 17:28:11 787

原创 PyQt5之使用QtDesigner设计

环境:pycharm+QtDesigner+pyUIC前提是已经安装了pycharm加QtDesigner插件开发环境。

2023-03-22 17:37:02 415

原创 C和C++程序互相调用方案

项目实际开发需求需要在C++程序中调用c语言实现的库,那么需要怎么实现呢?原理:C++函数为了支持函数重载,g++编译器会对函数名进行修饰,而C函数编译的符号表中只是函数名。同样的代码用C编译器(gcc)和C++编译器(g++)编译产生的函数名不同,导致C++连接找不到C语言的函数,所以C++程序中直接C函数是不能直接实现的,需要通过某种处理下面通过一个例子简单说明C++和C编译原理的不同之处上面源码用gcc编译。

2023-03-15 18:25:14 2180 2

原创 c++日志库log4cplus使用

log4cplus是C++实现的常用日志库,具有丰富的日志等级、多线程安全、支持输出到终端或文件等功能

2023-02-28 17:37:18 1064 2

原创 Ubuntn下安装protobuf和使用详解

Ubuntn下protobuf安装与使用

2023-02-23 17:55:21 7149 1

原创 Linux关于僵尸进程和孤儿进程深入

Linux中关于僵尸进程和孤儿进程的深入探索

2023-01-29 15:27:01 283

原创 C++中promise和future详解

C++中promise和future详解

2022-11-09 16:46:39 3350

原创 C++11智能指针

C++11智能指针总结

2022-11-03 18:06:04 661

原创 C++使用ifstream读取文件内容

C++ fstream实现文件读取功能

2022-10-14 17:27:13 10031 2

原创 【Shell】sh执行脚本报错Syntax error: “(“ unexpected

Ubuntn执行shell默认使用dash,而执行的脚本希望使用bash执行脚本,解决方案是通过禁止dash

2022-08-16 16:13:23 4568

原创 C++11新特性详细

C++11新增特性

2022-07-30 22:27:55 378

原创 C/C++实现内存池的方法

C/C++实现内存池

2022-06-23 21:41:30 365

原创 数据结构之单向循环链表

单向循环链表

2022-06-13 14:44:27 103

原创 数据结构之队列

数据结构之队列

2022-06-10 12:44:58 79

原创 UML 统一建模语言

UML统一建模语言定义:是一种基于面向对象的可视化建模语言UML采用了一组形象化的图形符号作为建模语言,使用这些符号可以形象地描述系统的各个方面UML通过建立图形之间的各种关系(如类与类之间的关系)来描述模型2、UML分类UML的关系主要包括4种关联关系依赖关系泛化关系UML有10种关系图1、用例图2、类图3、时序图等等其中最主要使用的就是类图下面详细介绍类图的使用3、类图类图是面向对象系统建模中最常用的图,是定义其他图的基础类图主要用来显示系统中的类、接口以及他们之

2022-05-24 15:03:41 208

原创 C++设计模式之理论(一)

设计模式:面向对象设计原则:1、单一职责原则:类的职责单一,对外只提供一种功能2、开闭原则: 类的改动是通过是增加代码进行的,而不是修改代码3、依赖倒转原则:依赖抽象,不要依赖具体的实现类,面向抽象编程4、高内聚 低耦合...

2022-05-21 21:54:59 113

原创 C++设计模式(三)之策略模式、命令模式、观察者模式、装饰者模式

C++设计模式之策略模式//抽象武器 武器策略class WeaponStrategy {public: virtual void useWeapon() = 0;};//武器:刀class Knife : public WeaponStrategy{public: virtual void useWeapon() { cout << "使用匕首" << endl; }};//武器:Ak47class Ak47 : public WeaponStr

2022-05-21 21:43:51 295

原创 C++设计模式(二)单例模式、代理模式、外观模式、模板方法模式

C++设计模式之依赖倒转原则(面向依赖编程)C++设计模式之单例模式有某些场景需要保证类只能有一个对象,那如何实现单例模式?大概需要如下三个步骤1、私有化构造函数2、private& static 静态数据: 指向对象的指针3、提供public访问权限的方法返回指向唯一对象的指针 (该方法一定是static方法,因为构造函数是private私有的)class SingleInstance {public: //提供静态接口 static SingleInstance* getIn

2022-05-20 15:49:44 237

原创 C++继承

多继承与虚继承当存在多继承发生菱形继承时 可能存在二义性问题(多继承的对象不能确定对象的属性是来自哪个类)//家具类class Furniture {public:private: int m; //材质};//床class Bed :public Furniture{public: void sleep() { cout << "在床上睡觉" << endl; }};//沙发class Sofa :public Furniture{

2022-05-13 22:52:32 214

原创 C++运算符重载、自己实现的String类

运算符重载重载本质上是函数调用,并且一个运算符在同一个类中只能被重载一次= () -> [] 只能采用成员函数的方式重载. .* ?: ::这些不能被重载习惯: 单目运算符采用类成员函数方式重载,双目运算符采用友元函数方式实现有如下分类:流重载: 只能采用友元函数方式重载 流重载函数返回值必须是引用输入流重载: 例子: string name; cin>>name; 分支cin istream类的对象输出流重载:例子: string name; co

2022-05-13 21:35:19 518

原创 C++之友元函数、const和static、类的组合

友元函数:friend修饰函数友元函数提供一个对象具有打破权限的功能eg1:class Test{public: void print() { cout << this->name << "\t" << this->age << endl; } friend void printData(Test&);//定义友元函数protected: string name = "xiaoming";private: int

2022-05-10 22:14:32 252

原创 C++类中类

C++类中类:类中成员是类形如下:第一种方式class A{public:class B;};class A::B{void print(){cout<<“A::B的print()被调用”<<endl;}};调用:A::B b;b.print();例子:使用namespace命名空间定义:class OBJECT::Boy {public: void print() { cout << "Boy" << en

2022-05-10 12:05:29 1848

原创 C++智能指针之01

C++ 智能指针01

2022-05-06 16:16:35 849

原创 C和C++互相调用

https://blog.csdn.net/qq_40803710/article/details/81632852?spm=1001.2014.3001.5502

2022-04-02 17:48:01 895

原创 小计之SQL

SQL语句#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <sqlite3.h>#include "ConfJSONParse.h"#include "ConfSQLApi.h"#include "PlatAllHeader.h"//MYSQL 数据库 APIextern MYSQL *mysql_conne

2022-04-02 16:21:40 302

原创 小计之RTCP

高低位转换///u val to byte#define U8_Conv_Byte(pBt, uVal, len) {(pBt)[0] = uVal; len += 1;}#define U16_Conv_Byte(pBt, uVal, len) {USHORT Val = htons(uVal); memcpy(pBt, &Val, sizeof(Val)); len+=sizeof(Val);}#define U32_Conv_Byte(pBt, uVal, len) {.

2022-04-02 16:20:04 254

空空如也

空空如也

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

TA关注的人

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