自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 cmake建立自己的package

通过cmake建立自己的package,cmake提供了CMakePackageConfigHelpers来方便实现我们的需求,详细文章参考如下:

2023-03-29 15:02:26 347

原创 跨平台开发Qt及其他c++项目,源码文件采用utf-8编码格式到底带不带bom?

BOM 是 byte-order mark 的缩写,是 “字节序标记” 的意思, 它常被用来当做标识文件是以 UTF-8、UTF-16 或 UTF-32 编码的标记。在 Unicode 编码中有一个叫做 “零宽度非换行空格” 的字符 ( ZERO WIDTH NO-BREAK SPACE ), 用字符 FEFF 来表示。对于 UTF-16 ,如果接收到以 FEFF 开头的字节流, 就表明是大端字节序,如果接收到 FFFE, 就表明字节流 是小端字节序。

2023-03-14 22:50:59 978

原创 Fast DDS入门十、Fast DDS的静态类型(IDL Types)详解

本节详细介绍接口定义语言(IDL)文件定义的数据类型(即Fast DDS的静态类型,与Fast DDS的动态类型区分),以及使用IDL创建数据类型的其他机制。

2023-03-12 16:00:36 2820

原创 Fast DDS入门九、Fast DDS的动态类型(Dynamic Types)详解

为了管理结构内的类型,用户可以使用自己的id根据结构内类型的类型调用get()和set()函数。如果结构包含一个复杂的值,则应该与loan_value一起使用来访问它,并与return_loned_value一起使用来释放该指针。DynamicData管理借出值的计数器,如果不调用return_loned_value,则用户无法借出先前借出的值。位字段可以是匿名的(无法寻址),以跳过位集中未使用的位。如果应用程序的数据模型是复杂的,则可以组合基本类型来创建复杂类型,包括嵌套组合类型(联合内结构内的结构)。

2023-03-12 13:42:50 1716

原创 C++左值、右值、左值引用、右值引用的详解

左值是可以放在赋值号左边可以被赋值的值;左值必须要在内存中有实体;右值当在赋值号右边取出值赋给其他变量的值;右值可以在内存也可以在CPU寄存器。一个对象被用作右值时,使用的是它的内容(值),被当作左值时,使用的是它的地址。

2023-03-11 23:02:30 707

原创 std::thread和std::this_thread的详细说明

std::thread类来表示执行的各个线程。执行线程是实际上是执行一系列指令,可以在多线程环境中与其他此类序列同时执行,同时共享相同的地址空间。std::this_thread命名空间包含了对当前线程的一些基本操作,如获取当前线程id、休眠当前线程、让渡当前线程的时间片给其他线程等。

2023-03-11 21:57:43 2653

原创 Fast DDS入门八、Fast DDS的发现机制

SIMPLE发现协议是默认发现协议,它解决了在各种DDS实体之间建立端到端连接的问题。Fast DDS实现了SIMPLE发现协议,以提供与RTPS标准的兼容性。该规范将SIMPLE发现协议分成两个独立的协议:简单参与者发现协议(SPDP):指定域参与者如何在网络中发现彼此;它宣布并检测同一域中DomainParticipant的存在。简单端点发现协议(SEDP):定义所发现的域参与者为交换信息而采用的协议,以便发现每个域参与者中包含的DDS实体,即DataWriter和DataReader。

2023-03-08 21:07:00 3099 1

原创 C++ 多线程同步condition_variable_any的用法

condition_variable_any用法与condition_variable基本相同,只是它的等待函数可以采用任何可锁定类型(mutex 类型,例如std::mutex)直接作为参数,condition_vvariable对象只能采用unique_lock<mutex>。除此之外,它们的用法是相同的。有关wait函数和notify函数的用法,请参考《C++ 多线程同步condition_variable用法》

2023-03-03 20:30:26 1122

原创 Fast DDS入门七、Fast DDS的侦听、通告以及底层传输介绍

Fast DDS的传输逻辑首先明确收方和发方是谁,收方和发方地址和端口的生成规则是什么,也就是侦听、通告的逻辑规则。其次Fast DDS的底层传输依赖于Transport Layer,是独立UDP/TCP之上传输接口层。

2023-03-03 17:10:58 2036

原创 VS项目与Qt项目互转和打开

Qt项目转换为VS项目有两种方式,VS的Qt插件方式和qmake命令转换方式,推荐采用VS的Qt插件方式,因为qmake命令方式将qt库当作普通库引入,不能像VS的Qt插件打开的Qt项目一样通过VS的项目属性配置Qt的库组件等信息。”,弹出“打开Qt项目”窗口,选择已建的Qt项目(.pro),VS2019像Qt Creator一样打开已建的Qt项目。窗口左侧选择想要转化为Qt的项目,点击OK,每个项目生成pro和pri项目文件,pri是pro的子文件,pri保存有头文件、cpp文件和资源等文件的加载路径。

2023-02-28 22:19:59 12064 3

原创 VS2019安装配置QT插件(qt-vsaddin)

Windows的Qt开发,一般采用Visual Studio安装Qt插件的方法开发Qt程序,毕竟VS开发工具还是比QtCreator开发工具强大、好用的多。本教程采用VS2019安装配置Qt插件(qt-vsaddin-msvc2019-2.6.0.vsix),默认已经安装了VS2019(已安装“MSVC V141-VS 2017 C++ x64/x86 生成…”选项)和Qt5.14(已安装“msvc2017 32-bit”和“msvc2017 64-bit”选项)。

2023-02-26 17:00:19 22512 6

原创 C++ 多线程同步condition_variable的用法

多线程并发有两大需求:互斥和同步(等待-触发)。互斥是因为线程间存在共享数据,等待-触发是因为线程间存在依赖关系。互斥最常见,一般通过互斥锁unique_lock(mutex)形式实现。同步,由于线程间需要按照预定的先后次序顺序进行,就要用到condition_variable和condition_variable_any。互斥锁条件变量中也要用到,互斥锁是条件变量的应用前提,必须先学会基础的unique_lock(mutex)互斥锁应用。

2023-02-26 12:27:25 2553 2

原创 VS开发C++动态库及其调用程序

用VS建立一个解决方案,包括两个项目:动态库TestDll和应用程序TestExe。以下详细介绍TestDll动态库配置导出类和函数的方法,以及TestExe应用程序如何调用TestDll和配置项目依赖关系。

2023-02-25 17:27:48 2327 1

原创 C++虚函数多态和纯虚函数多态的经典用法

此处为取得半径函数,只有圆形才有半径,方形是没有半径的,在这里基类Shape实现了getRadius()的虚函数,只不过Shape只是返回了0,因为基类不清楚怎么做,Circle子类重写了虚函数getRadius()的具体实现,如果用户输入1则创建Circle子类对象,因此在这里调用了Circle子类的重写函数,如果用户输入2则创建Square子类对象,Square子类没有重写基类虚函数getRadius(),因此在这里调用了基类Shape的虚函数getRadius()。

2023-02-24 23:31:45 295

原创 VS设置C++项目Release模式的可调试运行

(1)在VS2019开发环境中右击TestDll项目,选择【配置属性】->【调试】->【命令】中输入TestExe的绝对路径(例如:E:\Experiment\TestExe\Release\TestExt.exe)或者相对路径(例如:$(SolutionDir)$(Platform)\$(Configuration)\TestExe.exe或..\x64\ReleaseTestExt.exe)。(3)链接器 ->调试 ->生成调试信息 选择 生成调试信息(/DEBUG)

2023-02-24 17:37:29 3317

原创 Fast DDS入门六、Fast DDS的动态类型及示例程序

上一节,该示例程序介绍了采用Fast DDS-Gen工具通过接口定义语言(IDL)来生成数据结构类,该数据结构类具备序列化反序列化处理,用户只需要关注编写IDL的结构体接口以及在发布类和订阅类处理好结构体类数据的发送和接收就可以了。本节介绍一个更直接、更灵活的数据类型构造方法,在发布类和订阅类中直接构造动态类型,可以省略IDL的繁琐生成过程以及系列数据结构类文件。

2023-02-18 22:03:43 2283 1

原创 Fast DDS入门五、在Windows平台创建一个简单的Fast DDS示例程序

Fast DDS-Gen生成示例程序源码后,生成了系列的.h、.cxx源文件,同时生成了CMakeLists.txt文件。on_data_available()函数,是监听器的回调函数,被订阅者subscriber的阅读器reader接收到数据后,将socket接收的二进制数据反序列化成HelloWorld类数据,是开发人员的订阅接收数据入口。类,该类可注册到Fast DDS中,序列化和反序列化函数是vitual函数在父类中声明,在子类中实现,在发布订阅函数中实现回调处理,发布时将。

2023-02-15 17:28:23 3884

原创 Fast DDS入门四、Fast DDS-Gen使用介绍

Fast DDS-Gen是一个Java应用程序,它使用IDL(接口定义语言)文件中定义的数据类型生成Fast DDS源代码。生成的源代码可以用于任何Fast DDS应用程序中,以定义主题的数据类型,并且将用于发布或订阅。Fast DDS通过两个类定义Topic中交换的数据类型:TypeSupport和TopicDataType。TopicDataType描述发布和订阅之间交换的数据类型,即与Topic对应的数据;

2023-02-15 14:30:59 3490 1

原创 Fast DDS入门三、Fast DDS在Linux平台的编译安装

Configure过程中,会弹出缺少相关依赖库提示,人工选择前面已经下载安装的依赖库路径,Configure成功后,就可以Generate生成完整依赖工程项目(vscode/codeblocks等),然后在开发工具中build生成、install安装相关动态库so文件、可执行文件、头文件等。使用Fast DDS Gen,还可以与使用Fast DDS库的发布者和订阅者一起生成DDS应用程序的C++源代码(请参阅构建发布/订阅应用程序)。FastDDS的CMake选项很多,一般选择默认选择进行编译,就够用了。

2023-02-12 19:52:13 2732 1

原创 Fast DDS入门二、Fast DDS在Windows平台的编译安装

Configure过程中,会弹出缺少相关依赖库提示,人工选择前面已经下载安装的依赖库路径,Configure成功后,就可以Generate生成完整的Fast RTPS的vs解决方案(sln文件)。最后,打开sln解决方案,在vs编译界面下,选择Build项目生成将编译生成所有项目,编译生成动态库、应用程序成功后,选择Install项目生成将安装FastDDS头文件、lib、dll、exe到默认安装的路径下,这些文件就可以给其他工程导入使用FastDDS进行开发了。最后,单击右下角的“修改”。

2023-02-12 15:09:33 6653

原创 Fast DDS入门一、Fast DDS介绍

Fast DDS是DDS(数据分发服务)规范的C++实现,DDS是由对象管理组(OMG)定义的协议。Fast DDS库提供应用程序编程接口(API)和通信协议,用于部署以数据为中心的发布-订阅(DCPS)模型,目的是在实时系统之间建立高效可靠的信息分发。Fast DDS在资源处理方面具有可预测性、可扩展性、灵活性和高效性。为了满足这些要求,它使用了类型化接口,并依赖于一个多对多的分布式网络范例,该范例巧妙地允许将通信的发布方和订阅方分离。Fast DDS包括:DDS API实现。

2023-02-11 22:32:27 6741 5

C++动态库创建和应用程序调用动态库的源码

C++动态库的创建和应用源码,包括TestDll和TestExe两个项目,TestDll是动态库,TestExe调用动态库。

2023-02-25

C++虚函数多态和纯虚函数多态的经典示例源码

C++虚函数多态和纯虚函数多态的经典示例源码

2023-02-25

Fast DDS在Windows平台编译安装成功的独立install包

Fast DDS的install包,包括Fast DDS相关的头文件、动态库等,可以直接提供第三方程序使用。

2023-02-19

Fast DDS动态类型示例程序,DynamicHelloWorldExample源码

下载后解压后,打开build子目录下sln解决方案,vs直接编译运行。

2023-02-19

Fast DDS示例程序HelloWorldExample

下载后解压后,打开build子目录下sln解决方案,vs直接编译运行。

2023-02-19

空空如也

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

TA关注的人

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