- 博客(271)
- 资源 (65)
- 收藏
- 关注
原创 使用C++实现高精度时间日志记录与时间跳变检测[多线程版本]
本文将介绍多线程版本高精度时间日志记录小程序,该程序具备以下功能:1. **自定义时间间隔和文件名**:通过命令行参数设置时间间隔和输出文件名,默认值为20毫秒和`timestamps.txt`。2. **高精度定时**:采用`std::chrono::steady_clock`和高精度睡眠函数`clock_nanosleep`确保时间间隔的准确性,避免`std::this_thread::sleep_for`带来的时间漂移。3. **线程安全队列**:使用线程安全的队列缓存时间戳,减少频繁的文件I
2024-10-10 16:35:54 1174
原创 基于C++和Python的进程线程CPU使用率监控工具
本文将介绍一个基于C++和Python实现的进程线程CPU使用率监控工具,用于监控指定进程及其所有线程的CPU使用情况。编写这个工具的初衷是源于部分嵌入式ARM系统的top工具不支持显示线程级别的CPU使用情况。
2024-10-01 13:27:50 1385
原创 C++编程:实现简单的高精度时间日志记录小程序(单线程)
为了检查是否存在系统时间跳变,本文使用C++实现了一个简单的高精度时间日志记录小程序。该程序能够每隔指定时间(默认40毫秒)记录一次系统时间到文件中。
2024-09-27 23:10:06 1376
原创 C++使用 tinyFSM 实现有限状态机:从状态图到代码实践
在软件开发中,有限状态机(Finite State Machine,FSM)是一种重要的设计模式,广泛应用于系统建模、控制流管理和事件驱动程序设计。本文将介绍如何使用轻量级的 C++ 状态机库 **tinyFSM** 来实现一个有限状态机,从状态图描述到代码实现的全过程。
2024-09-19 15:42:09 1386
原创 C++编程:多线程环境下std::vector内存越界导致的coredump问题分析
多线程访问共享数据时,必须使用同步机制来防止数据竞争和内存越界,这是避免coredump的关键。内存越界是C++中导致段错误和程序崩溃的常见原因,不能依赖时序问题来规避。建议严格使用同步工具如`std::mutex`,并进行定期代码审查和多线程测试,确保线程安全。
2024-09-18 20:36:46 954
原创 C++编程:ZeroMQ进程间(订阅-发布)通信配置优化
ZeroMQ是适用于高性能的进程间通信(IPC)的中间件。本文将详细介绍几种优化ZeroMQ订阅-发布通信的方法,并通过代码示例展示如何在实际项目中应用。
2024-09-07 23:59:34 1064
原创 ZeroMQ 消息传递:多 Topic 共用与独立 IPC 的对比分析
在 ZeroMQ `PUB/SUB` 模型中,多个 `topic` 是共用一个 `IPC` 地址,还是为每个 `topic` 定义独立的 `IPC` 地址,是一个设计和性能的权衡问题。下面我将从**架构设计**、**性能影响**、**使用场景**等方面进行深入分析,并给出这两种方法的优劣对比。
2024-09-06 23:15:34 811
原创 理解C++全局对象析构顺序与 IPC 资源管理:避免 coredump
在编写 C++ 程序时,使用全局或静态对象有时可能会导致不可预期的崩溃(如 `coredump`)。这类崩溃通常源于对象的析构顺序、资源的管理方式,以及底层资源(如 IPC 通道或共享内存)的释放机制。本篇博客将通过一个典型的例子,深入剖析导致段错误的根本原因,并提供合理的解决方案。
2024-09-06 23:00:47 923
原创 C++编程:使用C++多线程和POSIX库模拟CPU密集型工作
本文利用C++与POSIX线程库(`pthread`)编写多线程程序,以模拟不同负载下的CPU资源占用情况。
2024-08-25 21:24:58 898
原创 Linux编程: C++线程CPU使用率监控与分析工具
本文将介绍一个结合 C++ 和 Python 的高性能 CPU 使用率监控和分析工具。该工具通过读取 Linux 系统的 `/proc` 文件系统实时采集 CPU 使用数据,利用 UnQLite 数据库进行高效存储,并通过 Python 实现数据解析和可视化。本工具支持对多个进程同时进行分析。
2024-08-25 15:31:37 1420
原创 C++编程:生产者-消费者模型中条件变量的使用问题及优化方案
在多线程编程中,生产者-消费者模型是一种常见的并发模式。然而,不当的设计可能导致多种问题,如死锁、资源竞争或信号丢失等。本文将探讨这些问题,并提出相应的解决方案。
2024-08-17 13:04:26 1262
原创 C++编程:无锁环形队列 (LockFreeRingQueue)的简单实现、测试和分析
在现代多线程编程中,高效的并发数据结构对于提升系统性能至关重要,尤其是在处理高并发场景时。本文将详细介绍一种无锁环形队列 (`LockFreeRingQueue`) 的实现,并探讨其在实际应用中的优势与局限。
2024-08-16 22:31:36 1651
原创 [QNX] C++编程: 外部硬件加速器与SOC共享内存中使用NOCACHE的必要性与优化策略
在嵌入式Linux-ARM系统编程中,FPGA和SOC(System on Chip)经常需要共享内存进行数据交换。SOC通过共享内存读取FPGA处理的数据,而FPGA则直接写入内存。这种架构在性能和实时性上有着明显的优势,特别是在需要高速数据传输的场景中,如视频处理、网络通信等。然而,这种内存共享架构也带来了一些挑战。最主要的问题在于数据一致性:由于FPGA直接操作内存,而不经过CPU的控制,这导致CPU的缓存无法感知到内存中的数据变化。如果SOC继续使用缓存中的旧数据,将可能导致数据的不一致性,进而
2024-08-11 22:19:31 588
原创 ROS2阻塞和性能问题的排查和优化方案
在使用 ROS2 进行传感器驱动数据接收时,出现了明显的性能问题,导致数据偶然丢失。经过排查,发现问题源于传感器的 ClientSDK 的回调函数 `data_callback` 中执行了 `publish` 操作。由于 ROS2 的 `publish` 操作会阻塞 `data_callback` 函数所在的线程,进而引发该问题。这种现象在 ROS2 `galactic` 发行版中尤为明显,因为其默认中间件为 `rmw_cyclonedds_cpp`,而非 `rmw_fastrtps_cpp`。本文
2024-08-04 10:52:16 1316
原创 C++编程:使用cpp-ipc实现基于共享内存的进程间发布订阅
`mutouyun/cpp-ipc` 我们提供了一种高效、跨平台且无锁的进程间通信解决方案。本文将基于`cpp-ipc` 实现两个生产者和消费者实例,特别重点介绍可以传输大文件的示例代码。
2024-08-02 23:29:57 1578
原创 C++编程: 解读无锁队列(Lock-Free)的原理、实现和实例
本文将基于几篇无锁队列(Lock-Free)技术文章阐述无锁队列的原理并推荐开源无锁队列库
2024-08-01 10:58:57 1456
原创 PTPD 在 QNX 系统上的授时精度验证与误差排查
PTPD是一种时间同步的开源实现,然而在不同操作系统上的表现可能存在显著差异。本文通过在QNX系统上运行PTPD,针对其授时精度进行详细验证,并对出现的误差进行深入排查和分析,旨在提升QNX系统中的时间同步精度。
2024-07-28 01:30:03 581
原创 在QNX中运行PTPD实现gPTP同步问题的排查与解决
在QNX系统中运行PTPd时,遇到了无法进行gPTP(通用精确时间协议)同步的问题。经过一番排查,发现QNX开发板可能无法收到数据链路层的数据包。
2024-07-28 00:14:28 793
原创 C++编程: 开源库Nanomsg和Iceoryx发布订阅模式的性能对比
在实时通信系统中,选择合适的中间件对于确保数据传输的效率和可靠性至关重要。本文通过对比 Nanomsg 和 Iceoryx 两种中间件在发布-订阅模式中的实现和性能表现,探索如何优化消息传递系统,并提供详细的测试代码和用例。通过实际代码实现和详细的性能测试,可以得到 Iceoryx 在实时系统中的优势。对于需要高性能和低延迟的实时通信系统,Iceoryx 是一个更好的选择。
2024-07-25 00:20:00 1181
原创 C++高性能通信:了解Iceoryx与零拷贝技术的实现与应用
iceoryx 使用真正的零拷贝共享内存方法,允许将数据从发布者传输到订阅者而无需任何副本。这可确保数据传输具有恒定的延迟,无论有效负载的大小是多少。
2024-07-24 23:10:10 2038 2
原创 C++编程: 使用 std::enable_shared_from_this 解决多线程悬空指针(智能指针失效)
在C++11多线程编程中,很容易遇到std::shared_ptr的悬空指针(智能指针失效)问题。而 `std::enable_shared_from_this` 可以避免在多线程环境中因对象提前销毁而导致的`std::shared_ptr`悬空指针。本文将详细介绍`std::enable_shared_from_this
2024-07-20 09:59:31 1224
原创 C++编程:使用std::weak_ptr监控std::shared_ptr解决多线程竞态实例(智能指针失效)
为了展示竞态条件的可能性,并且验证更安全的代码是如何避免这种竞态条件的,可以创建一个简单的多线程测试程序。我们将使用一个生产者-消费者模型,其中生产者向队列中添加带有 `std::shared_ptr` 的事件,而消费者则从队列中取出事件并处理它们。我们将实现两个版本:1. **不安全版本**:不检查 `std::shared_ptr` 是否有效2. **安全的版本**:消费者线程在持有锁的情况下检查 `std::shared_ptr` 的有效性。
2024-07-16 23:36:04 1156
原创 gtest单元测试:进程冻结与恢复管理模块的单元测试实现
在Linux系统中,进程的管理涉及到对进程状态的控制,特别是进程的冻结(暂停)和恢复(继续执行)功能对系统管理和调试非常重要。本文将展示如何使用Google Test(gtest)编写针对进程冻结与恢复功能的单元测试。
2024-07-14 22:21:48 1256
原创 Linux C++编程-实现进程的冻结与恢复管理模块
在Linux系统中,进程管理是核心组件,涵盖了创建、调度、暂停、恢复和终止等关键操作。本文将详细介绍基于C++的进程管理工具的设计与实现,包括进程的查找、暂停、恢复和终止功能。
2024-07-14 22:02:40 879
原创 Linux编程:使用 AddressSanitizer (ASan) 进行C/C++内存错误检测
AddressSanitizer(ASan)是内存错误检测的强大工具,本文将介绍如何在 ARM64 系统中有效配置和使用 ASan,同时提供一个示例程序的检测流程。
2024-07-10 15:11:08 2240
原创 定位和分析解决std::thread创建失败的问题和解决方法(mmap虚拟地址耗尽)
在高并发和长周期运行的环境中,频繁创建`std::thread`线程可能导致mmap虚拟地址空间耗尽,进而引发资源不足的错误。本文提出的增大mmap区域、优化线程栈空间以及引入线程池的策略,能够有效地管理线程资源,提高应用的稳定性和效率。
2024-07-10 01:00:04 937
原创 自定义C++线程管理类:解决std::thread()线程创建失败的问题
为了解决std::thread()线程创建失败的问题,我们常常遇到系统资源紧张导致pthread_create()函数返回EAGAIN错误,进而可能抛出std::system_error异常,如“Resource temporarily unavailable”或类似的错误信息。为了解决这一问题,本文引入了一个自定义的线程管理类:MyThread。通过这个自定义类,我们能够精确控制线程的创建、销毁、优先级调度、CPU亲和性设置以及等待唤醒机制。
2024-07-09 23:54:44 904
原创 实现Linux C++进程意外退出时信号处理与堆栈打印
本文详细介绍了如何利用C++中的信号处理机制和堆栈跟踪技术,实现进程守护化并捕获程序意外退出时的堆栈信息。通过分析和优化信号处理函数以及详细讨论堆栈信息的获取与打印,读者能够掌握在Linux平台下处理进程崩溃的关键技术和最佳实践。
2024-07-03 23:06:07 1815
原创 使用 Shell 和 Python 解析 top 输出并记录进程及线程的 CPU 使用率
本文将介绍如何通过Shell脚本和Python脚本,解析 `top` 命令的输出, 实现对指定进程及其线程的CPU使用率可视化展示。
2024-07-02 00:58:29 1352
原创 NEON 指令集对 CRC32 加速明显,但在 CRC 计算中反而造成性能下降的分析
本文比较了使用 NEON 指令集和简单 C 循环实现 CRC 和 CRC32 校验的性能。结果表明,启用 NEON 指令集可以显著提高 CRC32 的性能,而对 CRC 的影响则相反。在 -O2 编译优化的情况下,NEON CRC32 的速度比简单 C 循环快 8 倍以上,而 NEON CRC 竟然出乎意料的比简单 C 循环慢 20%。本文就此现象分析原因
2024-07-02 00:00:07 1003
原创 C++编程: 多进程下使用文件锁互斥执行压缩
为了避免多个进程同时压缩日志文件所引发的潜在问题,我们需要引入一种有效的同步机制来控制压缩实例的并发性。文件锁作为一种经典的同步解决方案,在这种场景下尤为适用。文件锁能够确保在任何时刻只有一个进程能够持有特定文件的锁,从而有效地限制并发压缩实例的数量,确保系统资源的合理利用和稳定运行。
2024-07-01 23:27:28 1031
原创 探索PcapPlusPlus开源库:网络数据包处理与性能优化
本文将详细探讨 PcapPlusPlus,介绍其功能特性、实际应用示例以及模块间的关系和依赖,以帮助 C++ 工程师更好地理解和利用该库进行网络应用程序开发。
2024-07-01 00:15:38 1944 1
原创 如何加速GitHub Clone或文件下载
在国内访问GitHub时,下载速度常常会受到网络限制。为了更快地下载GitHub上的文件,我们可以使用一些第三方加速服务、国内云存储服务以及下载工具。下面我将以下载 `Sourcetrail_2021_4_19_Windows_64bit_Portable.zip` 文件为例,详细介绍几种加速下载的方法。
2024-06-23 13:08:47 2218
原创 嵌入式系统固件升级方案设计
本文深入探讨了嵌入式系统升级设计的各个关键环节,包括存储布局、升级文件格式、升级流程和系统启动等。通过详细的技术实现、UML图和C++代码示例,本文展示了如何确保系统升级的稳定性和安全性,同时提供了实用的故障处理和性能优化策略。
2024-06-23 11:44:43 1794
原创 C++ 实现一个简单的状态机和行为树结合示例
用纯 C++ 实现一个简单的状态机和行为树示例,不依赖外部库。 结合有限状态机和行为树,并引入条件判断和随机性,设计一个简单的门控制系统。
2024-06-22 17:19:57 1140
原创 使用 TinyFSM 和 BehaviorTree.CPP 构建状态机与行为树示例
在现代软件开发中,有限状态机(FSM)和行为树(BT)是两种常用的工具,用于实现复杂的逻辑控制和决策。本文将展示如何结合使用 TinyFSM 和 BehaviorTree.CPP 创建一个简单的示例,实现一个模拟门的开关操作的系统。
2024-06-22 11:30:49 772
原创 探讨GMock封装与StubMock的实现及其优点
在软件开发和测试过程中,模拟(mocking)是一个非常重要的技术手段。特别是在单元测试中,模拟对象可以帮助我们隔离被测试的代码,确保测试的独立性和准确性。Google Mock(GMock)是一个广泛使用的C++模拟框架,但在一些复杂的场景下,直接使用GMock可能会显得不够灵活和高效。本文将深入探讨如何通过封装GMock,结合第三方库cpp-stub中的`stub.h`,实现一个功能更强大且灵活的模拟框架——StubMock。
2024-06-20 23:36:51 962
原创 使用`LD_PRELOAD`和`jemalloc`实现C/C++信号的内存堆栈信息收集
本文介绍如何结合`LD_PRELOAD`与`jemalloc`,在接收到`SIGUSR1`信号时打印程序的堆栈信息。详细步骤包括编译和配置`jemalloc`,编写信号处理程序,并通过`LD_PRELOAD`加载共享库的方法。
2024-06-09 20:37:25 879
原创 使用 OCLint进行静态代码分析:完整的配置与 CMake 集成实例
OCLint是一个静态代码分析工具,通过词法分析和语法树生成来解析C、C++和Objective-C代码。它应用预定义规则集,进行语义分析和静态检查,检测代码风格、复杂性、潜在错误、性能和安全问题。
2024-06-08 15:43:48 831
Visual_C++_6.0环境配置
2011-06-29
2440test 2440示例代码
2010-11-27
linux示例代码 example
2010-11-27
vs插件 适用于VC6.0 vs2005 vs2008(Visual.Assist)及破解包
2010-08-09
cpp_master_worker依赖第三方库地址
2022-07-21
cmake example with Support of Qt5
2022-07-17
EFFECTIVE MINIDUMPS
2013-11-15
Effective Exception Handling in Visual C++
2013-11-15
About Exceptions and Exception Handling
2013-11-15
A Crash Course on the Depths of Win32 Structured Exception Handling
2013-11-15
C# XML demo,C# XML入门,XmlHelper
2013-06-20
C#基础概念二十五问
2013-06-11
一小时入门C#(中英文)
2013-06-08
费用管理系统 vc + access
2012-06-15
利用剪贴板实现Exe程序间的数据交换
2011-09-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人