- 博客(36)
- 收藏
- 关注
原创 linux知识
内核是操作系统的核心部分,它负责管理系统资源、提供安全访问、实现硬件抽象等功能。内核的性能和稳定性直接影响到整个操作系统的性能和稳定性。随着计算机技术的不断发展,内核的设计和实现也在不断进步和完善。
2024-08-20 23:06:53
323
原创 设计模式详解
std::cout << "SimpleHouse 包括:\n" << std::endl;设计模式不是算法,算法提供明确的步骤,模式更像是一个蓝图(能看到最终的结果)设计模式是软件设计中常见的典型解决方案,可用于解决代码反复出现的设计问题。实现:接口,不可以创建对象,哺乳动物。工厂方法:用类的方式去延迟new。针对接口编程,不针对实现编程。为交互对象之间的松耦合而努力。组合:生命周期,一只猫有手。生成器构造比价复杂的对象。对扩展开放,对修改关闭。依赖:陌生的关系,点餐。设计模式分类(意图)
2024-08-09 14:37:33
770
原创 内存序详解
这行代码是一个C++函数中的返回语句,它使用了原子操作来读取一个标志位的值,并且将该值作为函数的返回结果。在多线程上下文中使用原子操作和适当的内存序是至关重要的,这样可以确保程序的正确性和预期的行为。,这个读取操作可能看到一个过期的值,如果其他线程正在写入同一个变量,而这个写入操作没有完成。或类似的类型),这种类型的变量是为了在多线程环境中安全地进行读取和写入而设计的。变量的当前值,而不关心其他线程可能对该变量进行的写入操作。是原子类型的一个成员函数,用于获取变量的当前值。的值,并将其作为函数的返回值”。
2024-08-08 10:19:50
147
原创 fast dds initial peers 详解
允许配置包含一个或多个此类 IP 端口地址的初始对等体列表 对应远程 DomainParticipants PDP 发现的监听资源,使得本地 DomainParticipant 不仅会将其 PDP 流量发送到其域指定的默认组播地址端口, 以及初始对等体列表中指定的所有 IP 端口地址对。TRANSIENT_DURABILITY_QOS:当一个新的DataReader加入时,它的历史记录会填充过去的样本,这些样本会存储在持久存储上(请参阅持久服务)。中设置的值的每个端口。也有可能不定义初始对等端口。
2024-08-03 16:54:15
652
原创 git 使用总结
这也是我们经常用的命令,他会把此次提交追加到上一次的commit内容里。例如,如果你喜欢使用 Vim,可以运行。例如,如果你喜欢使用 Vim,可以运行。:Git 可能没有正确地识别你的默认文本编辑器。:Git 可能没有正确地识别你的默认文本编辑器。取出缓存区栈顶(即最近一次)的内容,并且会删除此次。,于是出现了右边这个界面,即打开了一个vim。内容,并且提交此次修改,如果敲入“:q。将工作区的修改保存到缓存区,且取名为。的提交内容,包括所有文件的修改信息。),把他的修改在新分支上再修改一遍。
2024-07-17 14:36:51
667
原创 CmakeLists
如果使用的静态库, libcalc.a 可被打包到生成的可执行文件当中,动态库里面的数据不会打包到可执行文件里面,当程序一启动,可执行文件和静态库都会被加载到内存中,但是动态库不会,动态库只是执行到的时候才会被加载到内存中。CMAKE_CURRENT_SOURCE_DIR执行cmake时后面携带的路径 CMakeLists.txt对应的路径。PROJECT_SOURCE_DIR:执行cmake时后面携带的路径 CMakeLists.txt对应的路径。发布给客户需要给include 和库文件。
2024-07-17 14:36:48
419
原创 RTI DDS大数据碎片
PublicationBuiltingTopicData或SubscriptionBuiltnTopicData样本较大的最常见原因是序列化的TypeCode或TypeObject,但您也可能发送了大量属性(通过7.5.19 PROPERTY QosPolicy(DDS扩展))或具有较大的ContentFilteredTopic筛选器表达式,以及其他大小可变的字段,这可能会导致样本大小较大。如果您尝试发送一个大小大于MTU的DDS样本,但尚未设置DDS级碎片,您将看到IP级碎片。
2024-07-17 14:35:09
1066
原创 Rti DDS qos
1.parent.allow_interfaces_list字符串列表,每个字符串标识一系列接口地址或接口名称。接口必须指定为逗号分隔的字符串,每个逗号分隔一个接口。例如,以下是可接受的字符串:192.168.1.1192.168.1.*192.168.*192.*ether0如果列表非空,则此“白色”列表将应用于parent.dny_interfaces_list列表之前。DomainParticipant将使用由此产生的接口列表来通知其远程参与者哪些单播地址可用于联系D
2024-07-10 10:06:12
382
原创 protobuf的使用
protobuf:是一种数据格式,独立于平台,独立于语言,是一种二进制格式,可以存储更加复杂的数据结构,比如图,树,结构体,类。使用数据时,需要从磁盘里面加载数据--->反序列化。三条数据打包成大的数据块->TLV type length 数据。数据组织,若干条数据组成为一个大包然后转为string发送出去。2.数据的网络传输 数据从服务端发送到客户端。1.持久化:把数据存储到磁盘--->序列化。接收端:string反序列化为数据元素格式。# 或者使用 -I 参数。
2024-07-09 20:23:37
210
原创 fast dds statistics 模块
这是因为子类对象在内存中实际上是包含了父类部分的,为了正确地初始化父类部分(包括成员变量等),子类构造函数会隐式地(或显式地,如果你使用了初始化列表)调用父类的构造函数。在这个例子中,你可以看到无论是隐式还是显式地调用父类的构造函数,父类的构造函数都会在子类的构造函数之前被调用。:如果你没有在子类的构造函数中显式地调用父类的构造函数,编译器会隐式地调用父类的默认构造函数(无参构造函数)。如果父类没有定义默认构造函数,而你又没有在子类的构造函数中显式调用父类的某个构造函数,编译器将报错。
2024-07-08 16:25:11
695
原创 二级指针(double pointer)或称为指针的指针
在C++中,二级指针(double pointer)或称为指针的指针,是一个指向指针的指针。这意味着二级指针存储的是一个指针的地址,而这个指针又指向另一个地址。
2024-04-06 15:12:47
299
原创 std::condition_variable 详解
假设你有多个线程,其中一个线程负责产生数据(生产者),而其他线程负责消费这些数据(消费者)。当生产者产生数据时,它可能会设置一个条件变量来通知消费者线程数据已经准备好。消费者线程则会在循环中等待这个条件变量,直到数据准备好。是 C++ 标准库中的一个类,用于同步线程的执行。的成员变量),以允许线程等待某个条件成立。配合使用,以及一个条件(通常是。
2024-04-06 14:53:38
751
原创 万能择优器
项目经理带你-零基础学习C/C++【从入门到精通】项目十五 C++核心编程-万能择优器第1节 项目需求程序员Jack 的团队新接手了一个底层的项目,项目经理要求Jack 实现一个通用的容器,能够支持插入多种不同的普通类型(包含 int char float double 等)和自定义结构体和自定义类的对象,并能根据每种不同类型的比较规则从容器中取得最大或最小的那个值或对象。示例代码: // demo 15-1.c #include <v
2024-03-27 12:46:02
1408
原创 final 和override 详解
2.final 用来修饰类的虚函数,使得该虚函数在子类中,不能被重写。override只需在函数声明中使用,不需要在函数的实现中使用。1.final 用来修饰类,让该类不能被继承。override仅能用于修饰虚函数。
2024-03-26 22:35:42
216
原创 什么是继承和派生
但是, 又不想被外部访问那么就可以把这些成员, 定义为 protected访问权限!一个类, 如果希望, 它的成员, 可以被自己的子类(派生类)直接访问,Son类的成员函数中,可以直接访问它的父类的protected成员。父类的所有成员函数,以及数据成员,都会被子类继承!除了“构造函数”和“析构函数”,
2024-03-26 22:30:59
107
原创 建模常用的手段:聚合
给计算机配一台音响。(音响和电脑不是同生共死的关系,电脑坏了,音响还可以用)聚合不是组成关系,被包含的对象,也可能被其他对象包含。拥有者,不需要对被拥有的对象的生命周期负责。聚合就是有缘就聚在一起。
2024-03-24 17:58:06
125
原创 类的静态成员函数
在类的静态成员函数(类的静态方法)内部,不能直接访问this指针和对象的数据成员!在类的静态方法中,不能访问普通数据成员和普通成员函数(对象的数据成员和成员函数)对象的成员函数(没有static的成员函数)内部,可以直接访问“静态数据成员”类的静态成员函数(有static的成员函数)内部,可以直接访问“静态数据成员”类不能直接访问普通的静态数据成员(Human::humanCount 非法)在类的静态成员函数(类的静态方法)内部,只能访问类的数据成员。即:所有的成员函数,都可以访问静态数据成员。
2024-03-24 12:52:43
208
原创 类的静态成员
类静态成员,可以在类内设置初始值,也可以在类的实现文件中设置初始值。(但是不要同时在这两个地方初始化,只能初始化。只能使用一个全局变量,然后在构造函数中对这个全局变量进行修改(加1)缺点:使用全局变量不方便,破坏程序的封装性。的类静态成员,只能在类的实现文件中初始化。需要获取总的人数,如何实现?
2024-03-24 12:39:09
166
原创 拷贝构造函数
1.自定义拷贝构造函数2.合成的拷贝构造函数属于浅拷贝说明:合成的拷贝构造函数的缺点: 使用“浅拷贝解决方案:在自定义的拷贝构造函数中,使用‘深拷贝。
2024-03-23 23:05:22
138
原创 const详解
2. const 函数作为类的成员函数,必须用const 类型对象去调用const 成员函数。成员函数不能修改类的任何数据成员。但是,如果你确实需要在。4.类的成员函数的返回值为const,返回值不能被修改。1.const 作为函数参数,代表传入的参数不能被修改。成员函数中修改某个数据成员,你可以将该数据成员声明为。
2024-03-22 20:34:16
191
原创 ros2中的结构体
是一个枚举值或宏定义,通常用于配置ROS 2(Robot Operating System 2)中的RMW(ROS Middleware)实现,以限制通信仅在本地主机上进行。在ROS 2中,RMW层是负责底层通信的中间件接口,它允许ROS 2节点在不同的进程或机器之间发送和接收消息。具体的实现和名称可能会因ROS 2的不同发行版或RMW实现(如Fast-RTPS、DDS等)而略有不同。因此,最好查阅你正在使用的ROS 2发行版的官方文档或源代码,以获取最准确的信息。被设置为启用(例如,其值为非零或。
2024-03-17 19:11:32
176
原创 递归锁详解
然而,需要注意的是,过度依赖递归互斥量可能导致代码更难理解和维护。如果你知道你的代码中可能会有同一线程多次锁定同一互斥量的情况,那么使用。然而,需要注意的是,过度依赖递归互斥量可能导致代码更难理解和维护,因此在可能的情况下,最好寻找其他方法来实现线程同步,以避免使用。允许同一线程多次锁定同一互斥量,每次锁定都需要有一个对应的解锁操作。时,如果互斥量已经被锁定(无论是被哪个线程锁定的),都会导致阻塞或错误。则不允许同一线程多次锁定,否则会导致未定义行为,通常是死锁。,所以这种递归锁定是允许的。
2024-03-17 12:48:19
252
原创 ZROS_TOPOLOGY_DISABLE
在ROS 2的上下文中,拓扑(Topology)通常指的是系统中节点和它们之间消息传递关系的布局。节点之间的通信是通过发布和订阅主题(Topics)来实现的。为了确保系统的安全性和一致性,有时需要对节点名和主题名进行验证,以确保它们符合一定的规则或存在于预定义的白名单中。这个环境变量的具体作用取决于它是如何被ROS 2应用程序或库使用的。在ROS 2(Robot Operating System 2)中,,不会进行任何验证,即不会检查给定的名称是否在白名单数据库中。被设置为"1",则函数会直接返回。
2024-03-17 12:34:05
231
原创 ros2中的rosout节点的作用
节点为ROS 2提供了一个标准化的日志处理机制,使得不同节点和工具都能够以统一的方式处理日志信息。它为开发者提供了一个强大且灵活的工具来管理和查看日志,从而提高了开发效率、简化了调试过程,并增强了系统的可维护性。在ROS 2系统中负责收集、处理、发布日志信息,为开发者提供了一个统一且便捷的接口来管理和查看日志。发布的消息进行过滤。节点发布日志消息到特定的话题,其他节点或工具可以订阅这个话题来接收和查看这些日志消息。成为ROS 2系统中跨节点通信日志信息的桥梁,实现了日志信息的共享和集中管理。
2024-03-17 12:03:35
318
原创 IPC共享内存机制
是允许两个或多个进程(不相关或有亲缘关系)访问同一个逻辑内存的机制。它是共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。两种常用共享内存方式System V版本的共享内存 shmm多个进程直接共享内存文件映射 mmap文件进行频繁读写,将一个普通文件映射到内存中2.将特殊文件进行匿名内存映射,为关联进程提供共享内存空间3.为无关联的进程提供共享内存空间,将一个普通文件映射到内存中。
2024-03-16 22:40:39
803
原创 可重入函数
这意味着,即使该函数或过程被中断并在稍后的时间点再次被调用,它也不会产生错误的结果或导致数据不一致。在编程实践中,创建可重入函数通常意味着要非常小心地使用变量和同步机制,以确保函数的正确性和线程安全性。在多线程编程中,使用可重入函数是非常重要的,因为这样可以避免数据竞争、死锁和其他并发问题。在操作系统中,可重入代码是那些可以在任何时间被中断,然后稍后从中断点安全恢复执行的代码。:递归函数通常不是可重入的,因为它们可能会在执行过程中多次调用自己,这可能导致堆栈溢出或其他问题。
2024-02-25 17:32:50
257
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人