自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(304)
  • 资源 (65)
  • 收藏
  • 关注

原创 C++编程:使用std::string仿写c++17的std::string_view

在性能敏感的应用中(如网络库、系统编程等),频繁的字符串拷贝会带来性能开销。 C++17 字符串string_view可以减少拷贝。本文介绍一个基于 C++11 实现的的 `StringView` 类,设计理念是避免不必要的内存分配和字符串拷贝,同时提供类似标准字符串的操作接口。

2024-11-22 11:36:53 560

原创 C++编程:通过多线程与协程优化阻塞型任务的调度性能

我们知道:- **多线程**:适用于处理计算密集型任务或IO操作较少的场景,但会因为线程切换和创建销毁的开销而影响性能。- **协程**:适用于处理需要大量并发且具有等待或阻塞的任务。在阻塞型任务中,协程通过上下文切换以提高资源利用率,减少开销。本文将探讨如何通过 **多线程** 和 **协程** 来优化 **阻塞型任务**(例如矩阵乘法)调度性能。使用的协程库来自:[state-threads](https://github.com/ossrs/state-threads)[state-thr

2024-11-19 16:57:57 675

原创 C++多线程管理:线程封装与守护监控线程实现

本文将介绍如何通过**二次封装**来管理线程,以及如何利用**守护线程**机制监控多个线程的状态,确保程序的稳定性和高可用性。

2024-11-19 11:10:48 1199

原创 优化C++设计模式:用模板代替虚函数与多态机制

MISRA C++ 标准对类型转换和虚函数使用做出严格规定,尤其在嵌入式系统中,以确保代码的可预测性和高效性。传统设计模式中虚函数和多态性引入会增加运行时开销,增加系统负担。然而,模板编程通过编译时决策代替运行时动态绑定,可以提升性能并降低内存消耗。本文将尝试使用C++11改进常用的几个设计模式。

2024-11-15 18:26:06 1079

原创 C++编程:实现一个简单的消息总线

本文将介绍如何使用 C++ 编写一个改进的消息总线系统,其中包括以下功能:- **消息发布**:发布消息给所有订阅该消息的订阅者。- **消息订阅**:允许订阅者订阅感兴趣的消息,并注册回调函数以便处理接收到的消息。- **定时任务调度**:支持周期性的任务调度,例如定时检查超时的订阅。- **超时管理**:每个订阅可以设置超时回调,如果在指定时间内未收到消息,将执行该回调。

2024-11-15 08:47:20 1028

原创 Linux编程:基于 Unix Domain Socket 的进程/线程间通信实时性优化

基于 Unix Domain Socket 的线程间通信实时性优化,能够处理多个客户端的连接,并异步地读取和写入数据。

2024-11-13 12:23:12 1352

原创 C++编程:嵌入式Linux-ARM与外设中断交互的程序设计

本文介绍在 Linux-ARM 系统中利用中断与外设(如 DSP、DAC、扫描仪等)交互的模块,实现了低延迟的中断响应。外设通过 UIO 驱动暴露 `/dev/uio` 设备节点,用户空间程序可以通过这些节点来处理中断。

2024-11-09 23:02:11 1794

原创 Linux编程:嵌入式ARM平台Linux网络实时性能优化

本文将通过优化时钟周期、网络中断处理、协议栈配置、CPU 调度等配置来提升网络吞吐量,尤其是 UDP 数据包的处理效率。同时也将分析这些优化措施可能带来的副作用和对系统资源的影响。

2024-11-08 23:56:56 1036

原创 C++编程:避免因编译优化引发的多线程死锁问题

在多线程编程中,嵌套锁通常不会导致问题,但在某些情况下(例如使用高级编译优化 `-O3` 或代码执行多次时),编译器优化可能会改变原本稳定的执行顺序,从而引发死锁。实际上,死锁的根本原因通常是程序中 **锁获取顺序的不一致** 和 **内存操作顺序问题**,而并非优化本身所导致的。本文将探讨如何通过编译器优化(如 `-O3`)导致的内存顺序变化,引发死锁的潜在风险,并提供相应的解决方案。

2024-11-08 19:08:42 815

原创 C++编程:警惕线程优先级反转

在多线程编程中,线程之间的资源同步如果处理不当,会出现**线程优先级反转(Priority Inversion)**的情况,这可能导致系统性能下降,甚至引发崩溃。本文将通过 C++ 示例代码解释优先级反转的概念,并提出避免这一问题的方法。

2024-11-08 01:05:45 1247

原创 Linux编程:使用DMA优化UDP 数据传输吞吐量并降低延迟

UDP 网络传输常面临高 CPU 占用、传输延迟和丢包等挑战。本文将介绍 DMA 如何优化 UDP 数据包的发送,以提高吞吐量、减少延迟并降低 CPU 占用。

2024-11-06 02:59:07 1667 1

原创 Linux 编程:高实时性场景下的内核线程调度与网络包发送优化

CFS 调度器是 Linux 默认的调度策略,适用于大多数通用应用,但在实时性要求较高的场景中可能需要使用 SCHED_FIFO 或 SCHED_RR 等实时调度策略。PREEMPT-RT 补丁 可以优化系统的实时性,减少内核的调度延迟,尤其适用于需要低延迟和高实时性的嵌入式系统和自动驾驶等应用。对于需要处理实时数据的系统,使用 SCHED_FIFO 配置网络和中断处理线程,可以最大程度地减少延迟和丢包,提高系统性能和稳定性。

2024-11-06 01:57:14 1499

原创 使用 C++ 进行高效序列化和反序列化的实现(优化版本)

之前的文章 二进制序列化与反序列化:支持C++基础类与STL容器已介绍了serialize.hpp,本文将给一个支持C++14以上版本的优化版本。

2024-11-02 23:53:01 1036

原创 Iceoryx2:高性能进程间通信框架(中间件)

Iceoryx2 是一个基于 Rust 实现的开源中间件,专为实现超低延迟和高可靠性的零拷贝进程间通信而设计。相比其前身Iceoryx,Iceoryx2 在多个关键领域进行了显著改进,包括内存安全、并发处理、模块化设计以及多平台支持。

2024-11-02 12:03:25 1576

原创 基于现代 C++17 的模块化视频质量诊断处理流程优化设计

在整理视频质量诊断程序模块代码时发现,处理流程通常是固定的,各种检测功能以函数形式顺序调用。这种设计缺乏灵活性,不易于扩展和维护。本文将使用 C++17 的 std::function 和 std::any,重新设计视频质量诊断处理流程,实现模块化、可灵活扩展的处理管道。

2024-10-28 13:43:57 1681

原创 C++编程:实现一个基于原始指针的环形缓冲区(RingBuffer)缓存串口数据

本文将介绍一个解析串口数据的环形缓冲区,使用'$'或者'#'分割串口消息。选用内存块数组,而不是选用一整块的内存+读写指针的方式,以减少读写数据时的资源竞争。

2024-10-17 10:03:10 1600

原创 C++编程:利用ARM硬件加速CRC32计算

本文将介绍如何在ARM架构上通过硬件加速实现高性能的CRC32计算,并与传统的软件实现进行性能对比。

2024-10-11 20:53:12 1348

原创 使用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 1311

原创 基于C++和Python的进程线程CPU使用率监控工具

本文将介绍一个基于C++和Python实现的进程线程CPU使用率监控工具,用于监控指定进程及其所有线程的CPU使用情况。编写这个工具的初衷是源于部分嵌入式ARM系统的top工具不支持显示线程级别的CPU使用情况。

2024-10-01 13:27:50 1522 1

原创 C++编程:实现简单的高精度时间日志记录小程序(单线程)

为了检查是否存在系统时间跳变,本文使用C++实现了一个简单的高精度时间日志记录小程序。该程序能够每隔指定时间(默认40毫秒)记录一次系统时间到文件中。

2024-09-27 23:10:06 1504

原创 C++使用 tinyFSM 实现有限状态机:从状态图到代码实践

在软件开发中,有限状态机(Finite State Machine,FSM)是一种重要的设计模式,广泛应用于系统建模、控制流管理和事件驱动程序设计。本文将介绍如何使用轻量级的 C++ 状态机库 **tinyFSM** 来实现一个有限状态机,从状态图描述到代码实现的全过程。

2024-09-19 15:42:09 2299

原创 C++编程:多线程环境下std::vector内存越界导致的coredump问题分析

多线程访问共享数据时,必须使用同步机制来防止数据竞争和内存越界,这是避免coredump的关键。内存越界是C++中导致段错误和程序崩溃的常见原因,不能依赖时序问题来规避。建议严格使用同步工具如`std::mutex`,并进行定期代码审查和多线程测试,确保线程安全。

2024-09-18 20:36:46 1200

原创 C++编程:ZeroMQ进程间(订阅-发布)通信配置优化

ZeroMQ是适用于高性能的进程间通信(IPC)的中间件。本文将详细介绍几种优化ZeroMQ订阅-发布通信的方法,并通过代码示例展示如何在实际项目中应用。

2024-09-07 23:59:34 1605

原创 ZeroMQ 消息传递:多 Topic 共用与独立 IPC 的对比分析

在 ZeroMQ `PUB/SUB` 模型中,多个 `topic` 是共用一个 `IPC` 地址,还是为每个 `topic` 定义独立的 `IPC` 地址,是一个设计和性能的权衡问题。下面我将从**架构设计**、**性能影响**、**使用场景**等方面进行深入分析,并给出这两种方法的优劣对比。

2024-09-06 23:15:34 999

原创 理解C++全局对象析构顺序与 IPC 资源管理:避免 coredump

在编写 C++ 程序时,使用全局或静态对象有时可能会导致不可预期的崩溃(如 `coredump`)。这类崩溃通常源于对象的析构顺序、资源的管理方式,以及底层资源(如 IPC 通道或共享内存)的释放机制。本篇博客将通过一个典型的例子,深入剖析导致段错误的根本原因,并提供合理的解决方案。

2024-09-06 23:00:47 1019

原创 C++编程:使用C++多线程和POSIX库模拟CPU密集型工作

本文利用C++与POSIX线程库(`pthread`)编写多线程程序,以模拟不同负载下的CPU资源占用情况。

2024-08-25 21:24:58 989

原创 Linux编程: C++线程CPU使用率监控与分析工具

本文将介绍一个结合 C++ 和 Python 的高性能 CPU 使用率监控和分析工具。该工具通过读取 Linux 系统的 `/proc` 文件系统实时采集 CPU 使用数据,利用 UnQLite 数据库进行高效存储,并通过 Python 实现数据解析和可视化。本工具支持对多个进程同时进行分析。

2024-08-25 15:31:37 1654

原创 C++编程:生产者-消费者模型中条件变量的使用问题及优化方案

在多线程编程中,生产者-消费者模型是一种常见的并发模式。然而,不当的设计可能导致多种问题,如死锁、资源竞争或信号丢失等。本文将探讨这些问题,并提出相应的解决方案。

2024-08-17 13:04:26 1382

原创 C++编程:无锁环形队列 (LockFreeRingQueue)的简单实现、测试和分析

在现代多线程编程中,高效的并发数据结构对于提升系统性能至关重要,尤其是在处理高并发场景时。本文将详细介绍一种无锁环形队列 (`LockFreeRingQueue`) 的实现,并探讨其在实际应用中的优势与局限。

2024-08-16 22:31:36 2031

原创 [QNX] C++编程: 外部硬件加速器与SOC共享内存中使用NOCACHE的必要性与优化策略

在嵌入式Linux-ARM系统编程中,FPGA和SOC(System on Chip)经常需要共享内存进行数据交换。SOC通过共享内存读取FPGA处理的数据,而FPGA则直接写入内存。这种架构在性能和实时性上有着明显的优势,特别是在需要高速数据传输的场景中,如视频处理、网络通信等。然而,这种内存共享架构也带来了一些挑战。最主要的问题在于数据一致性:由于FPGA直接操作内存,而不经过CPU的控制,这导致CPU的缓存无法感知到内存中的数据变化。如果SOC继续使用缓存中的旧数据,将可能导致数据的不一致性,进而

2024-08-11 22:19:31 699

原创 ROS2阻塞和性能问题的排查和优化方案

在使用 ROS2 进行传感器驱动数据接收时,出现了明显的性能问题,导致数据偶然丢失。经过排查,发现问题源于传感器的 ClientSDK 的回调函数 `data_callback` 中执行了 `publish` 操作。由于 ROS2 的 `publish` 操作会阻塞 `data_callback` 函数所在的线程,进而引发该问题。这种现象在 ROS2 `galactic` 发行版中尤为明显,因为其默认中间件为 `rmw_cyclonedds_cpp`,而非 `rmw_fastrtps_cpp`。本文

2024-08-04 10:52:16 2396

原创 详解高性能中间件Iceoryx在ROS2中的使用

本文将概述ROS2相比ROS中间件的改进和优势,重点推荐Iceoryx

2024-08-04 10:21:26 2481

原创 C++编程:使用cpp-ipc实现基于共享内存的进程间发布订阅

`mutouyun/cpp-ipc` 我们提供了一种高效、跨平台且无锁的进程间通信解决方案。本文将基于`cpp-ipc` 实现两个生产者和消费者实例,特别重点介绍可以传输大文件的示例代码。

2024-08-02 23:29:57 2594

原创 C++编程: 解读无锁队列(Lock-Free)的原理、实现和实例

本文将基于几篇无锁队列(Lock-Free)技术文章阐述无锁队列的原理并推荐开源无锁队列库

2024-08-01 10:58:57 2150

原创 PTPD 在 QNX 系统上的授时精度验证与误差排查

PTPD是一种时间同步的开源实现,然而在不同操作系统上的表现可能存在显著差异。本文通过在QNX系统上运行PTPD,针对其授时精度进行详细验证,并对出现的误差进行深入排查和分析,旨在提升QNX系统中的时间同步精度。

2024-07-28 01:30:03 809

原创 在QNX中运行PTPD实现gPTP同步问题的排查与解决

在QNX系统中运行PTPd时,遇到了无法进行gPTP(通用精确时间协议)同步的问题。经过一番排查,发现QNX开发板可能无法收到数据链路层的数据包。

2024-07-28 00:14:28 1125

原创 C++编程: 开源库Nanomsg和Iceoryx发布订阅模式的性能对比

在实时通信系统中,选择合适的中间件对于确保数据传输的效率和可靠性至关重要。本文通过对比 Nanomsg 和 Iceoryx 两种中间件在发布-订阅模式中的实现和性能表现,探索如何优化消息传递系统,并提供详细的测试代码和用例。通过实际代码实现和详细的性能测试,可以得到 Iceoryx 在实时系统中的优势。对于需要高性能和低延迟的实时通信系统,Iceoryx 是一个更好的选择。

2024-07-25 00:20:00 1707

原创 C++高性能通信:了解Iceoryx与零拷贝技术的实现与应用

iceoryx 使用真正的零拷贝共享内存方法,允许将数据从发布者传输到订阅者而无需任何副本。这可确保数据传输具有恒定的延迟,无论有效负载的大小是多少。

2024-07-24 23:10:10 3111 3

原创 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 1413

原创 C++编程:使用std::weak_ptr监控std::shared_ptr解决多线程竞态实例(智能指针失效)

为了展示竞态条件的可能性,并且验证更安全的代码是如何避免这种竞态条件的,可以创建一个简单的多线程测试程序。我们将使用一个生产者-消费者模型,其中生产者向队列中添加带有 `std::shared_ptr` 的事件,而消费者则从队列中取出事件并处理它们。我们将实现两个版本:1. **不安全版本**:不检查 `std::shared_ptr` 是否有效2. **安全的版本**:消费者线程在持有锁的情况下检查 `std::shared_ptr` 的有效性。

2024-07-16 23:36:04 1300

模仿Outlook建立分类列表框

这个程序模仿Outlook建立分类列表框。没有用到CTreeCtrl类

2011-09-08

一个可停靠的,可自动隐藏的,并且可以换肤的 OutLookBar

使用方法及介绍http://blog.113e.com/281206.shtml

2011-08-26

双击listbox某一行,使这行的某个内容出现在编辑框中。

双击listbox某一行,使这行的某个内容出现在编辑框中。

2011-08-17

使用packet.dll发送与接收原始数据包

相关文章http://blog.youkuaiyun.com/stallion5632/article/details/6689265

2011-08-16

使用packet .dll的原始数据发送和接收

详情请进http://blog.youkuaiyun.com/stallion5632/article/details/6689265

2011-08-15

Visual_C++_6.0环境配置

Visual C++ 6.0环境配置 1 1. 概述 2 2. 环境设置(Environment Settings) 2 2.1 配置Tab键所占的字宽 2 2.2 配置代码颜色 2 2.3 设置前后的效果对比 3 3. 工作区域设置(Workspace Settings) 4 3.1 调整工具栏(Tool Bar) 4 3.2 调整Workspace的位置 5 3.3 关闭Output窗体 5 3.4 设置前后的效果对比 5 4. 工程设置(Project Settings) 7 4.1 设置Precompiled Headers 7 4.2 设置编译后的文件路径 7 5. Console-base的调试环境 8 5.1 设置Console-base 8 5.2 让Console与Window共存 10 6. 快捷键(Shortcut-key) 12 6.1 文件操作 12 6.2 代码间的快速跳转 12 6.3 编译?运行?调试(debugging) 13 6.4 各类常用的window 13 7. 总结 13

2011-06-29

SourceInsight 安装文件 序列号以及配置文件

里面包含: SourceInsight安装文件 序列号以及配置文件 配置文件风格和VS2005很相似

2010-11-27

Protel99seME 小插件 鼠标增强

Protel99seME 还是经典的东西啊,体积小,有了这个就更方便了

2010-11-27

WINCE同步USB驱动

WINCE同步USB驱动,仅仅是驱动,很好的

2010-11-27

PDF转换成Word小工具

PDF转换成Word小工具,只要PDF能转换的都能

2010-11-27

GPS定位 WINCE

用EVC开发的程序,VS和EVC应该都可以打开,但是要装上相应的SDK

2010-11-27

GPRS收发短信实验 WINCE EVC

用EVC开发的程序,VS和EVC应该都可以打开,但是要装上相应的SDK

2010-11-27

GPRS拨打电话实验 EVC WINCE

用EVC开发的程序,VS和EVC应该都可以打开,但是要装上相应的SDK

2010-11-27

TCPIP通信实验 WINCE EVC

用EVC开发的程序,VS和EVC应该都可以打开,但是要装上相应的SDK

2010-11-27

UDP通信实验 wince EVC

用EVC开发的程序,VS和EVC应该都可以打开,但是要装上相应的SDK

2010-11-27

2440test 2440示例代码

2440test由友善之臂提供,为2440开发板的示例程序,请使用ADS编译。 注意:2440test可自适应64M-1GB Nand Flash版本的 mini2440/micro2440

2010-11-27

linux示例代码 example

请把该目录复制到 /opt/FriendlyARM/mini2440目录中,编译使用时进入其中一个子目录,运行make即可。 该目录的 linux压缩包位于本光盘的linux目录中,名字为:examples.tgz

2010-11-27

2440原理图和封装库

41-40pin转接头原理图和封装库.ddb mini2440-PcbLib.lib mini2440原理图.ddb mini2440原理图.pdf

2010-11-27

keil生成bin文件 英贝德的东西

keil生成bin文件,网上找的,挺好的

2010-11-27

MFC序列化资料文档 序列化资料

MFC序列化资料文档 ,网上找的,希望对你有用

2010-08-09

perf-arm-jetson

perf-arm-jetson

2024-05-08

cpp_master_worker依赖第三方库地址

cpp_master_worker依赖第三方库地址 loghelper : 这是我一直在使用的基于boost.log的日志库; concurrentqueue : A fast multi-producer, multi-consumer lock-free concurrent queue for C++11 libzmq : ZeroMQ core engine in C++, implements ZMTP/3.1 和 cppzmq : Header-only C++ binding for libzmq

2022-07-21

cmake example with Support of Qt5

project( Qt5Project ) cmake_minimum_required( VERSION 2.8.11 ) # root of your msvc14 x64 prebuild set( CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "C:/Qt/Qt5-msvc14/5.6/msvc2015_64" ) set( CMAKE_INCLUDE_CURRENT_DIR ON ) set( CMAKE_AUTOMOC ON ) find_package( Qt5Widgets REQUIRED ) qt5_wrap_ui( UI_HEADERS mainwindow.ui ) qt5_add_resources( QRCS resources.qrc ) add_executable( ${PROJECT_NAME} main.cpp mainwindow.cpp ${UI_HEADERS} ${QRCS} ) target_link_libraries

2022-07-17

cpp-python-tcp-demo

cpp-python-tcp-demo

2022-06-05

qtcreator_style2

qtcreator配置文件,visual studio风格

2022-06-05

EFFECTIVE MINIDUMPS

在过去几年里,崩溃转储(crash dump)成为了调试工作的一个重要部分。如果软件在客户现场或者测试实验室发生故障,最有价值的解决方式是能够创建一个故障瞬间的应用程序状态镜像,然后可以在开发者的机器上通过调试器进行分析。第一代的crash dump通常被称为“全用户转储(full user dump)”,它包含了进程的虚拟内存的全部内容。毫无疑问,这样的dump对于事后调试非常有价值。但是,这样的dump经常非常大,使得通过电子方式发送给开发者非常困难,甚至没法完成。另外,没用公共接口可以通过程序调用来创建dump,我们必须依赖于第三方工具(例如,Dr. Watson 或者Userdump)来创建他们。 随着Windows XP,微软发布了一组新的被称为“minidump”的崩溃转存技术。Minidump很容易定制。按照最常用的配置,一个minidump只包括了最必要的信息,用于恢复故障进程的所有线程的调用堆栈,以及查看故障时刻局部变量的值。这样的dump文件通常很小(只有几K字节)。所以,很容易通过电子方式发送给软件开发人员。一旦需要,minidump甚至可以包含比原来的crash dump更多的信息。例如,可以包含进程使用的内核对象的信息。另外,DbgHelp.dll提供了通过编程创建minidump的公开API。而且,它是可以重新发布的。我们可以不再依赖于外部工具。 minidump可以定制,给我们带来了一个问题-保存多少应用程序状态信息才能既保证调试有效,又能够尽量保证minidump文件尽可能小?尽管调试简单的异常访问只需要调用堆栈和局部变量的信息,但是解决更复杂的问题需要更多的信息。例如,我们可能需要查看全局变量的值、检查堆的完整性和分析进程虚拟内存的布局。同时,可执行程序的代码段往往是多余的,开发用的机器上可以很容易找到这些执行程序。 幸运的是我们可以通过DbgHelp函数组(MiniDumpWriteDump和MiniDumpCallback)来控制这些功能,甚至可以更复杂。在这篇文章里面,我们会解释怎么样使用这些函数来创建mindump,保证文件足够小但是又能有效调试。也会讲解minidump中应该包括那些数据,并且如何使用通用调试器(WinDbg和VS.NET)来看这些信息。

2013-11-15

Effective Exception Handling in Visual C++

这篇文章描述的是捕获和处理运行在Windows下的Visual C++程序中异常与错误的标准技术。 异常(或者说关键性错误、崩溃)一般来说是你的程序运行不正常,从面不得不停止运行的情况。比如说,如果你的程序访问一块无效的内存地址(如NULL指针)、无法分配一个Buffer(内存不足)、C语言库的运行时(C run-time libraries,CRT)发现一个错误,并且需要程序立即停止运行等等,这些情况下都会产生一个异常。 一个C++程序可能会处理几种异常:SEH异常,这是由操作系统结构化异常处理系统产生的;CRT错误,这是由C语言库运行时——还有——信号(signals)产生的。每种类型的错误都需要安装一个异常处理函数,以便能在出错时拦截这个消息,并做一些错误恢复的处理。 如果你的程序有好几个线程,那么事情或许会更复杂一些。有些异常处理机制是对整个程序有效的,而另一些则仅对当前线程有效,这种情况下,你必须为每个线程都安装异常处理。 你程序中的每个模块(EXE或DLL)如果都连接了CRT库(无论是静态还是动态的),那么异常处理的方法就主要基于CRT的连接方式(?)。 各种各样类型的错误,多线程下对异常的各种不同的捕获方法,还有基于CRT连接方式异常处理,这让你的程序捕获所有可能的异常变得困难且麻烦。这篇文章的目的就在于帮助你更好的了解异常机制,并在你的C++程序中更好更有效的利用它。 这篇文章附带了一个小控制台程序ExceptionHandler作为例子,这一个例子能产生和捕获各种不同的异常,并且能生成一个崩溃时的Dump文件,通过这个文件你可以定位到出错的代码行。

2013-11-15

About Exceptions and Exception Handling

当遇到下列情况时,程序会出现异常: 程序访问一个不可用的内存地址(例如,NULL指针); 无限递归导致的栈溢出; 向一个较小的缓冲区写入较大块的数据; 类的纯虚函数被调用; 申请内存失败(内存空间不足); 一个非法的参数被传递给C++函数; C运行时库检测到一个错误并且需要程序终止执行。

2013-11-15

A Crash Course on the Depths of Win32 Structured Exception Handling

在Win32的核心, 结构化异常处理(Structured Exception Handling)(SEH) 是操作系统提供的一种服务. 你能找到的所有关于SEH的文档都会描述某一种编译器的运行时库(runtime library)对操作系统实现的某种包装. 这篇文章层层剥析SEH一直到它的最基本的概念.

2013-11-15

C# XML demo,C# XML入门,XmlHelper

After working with a couple of XML projects for the last six months, I am ready to share a class I wrote called XmlHelper which got me through all the complexity of XML and made my life a lot simpler. If you are a XML beginner or have no idea about XML, this article should teach you the very basic c

2013-06-20

C#基础概念二十五问

1.静态成员和非静态成员的区别? 2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的? 7.override 和 overload 的区别? 8.什么是索引指示器? 9.new 修饰符是起什么作用? 10.this 关键字的含义? 11.可以使用抽象函数重写基类中的虚函数吗? 12.密封类可以有虚函数吗? 13.什么是属性访问器? 14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗? 15.接口可以包含哪些成员? 16.类和结构的区别? 17.接口的多继承会带来哪些问题? 18.抽象类和接口的区别? 19.别名指示符是什么? 20.如何手工释放资源? 21.P/Invoke是什么? 22.StringBuilder 和 String 的区别? 23.explicit 和 implicit 的含义? 24.params 有什么用? 25.什么是反射?

2013-06-11

一小时入门C#(中英文)

如果你是有C++的功底,对C#感兴趣的。这篇文章正适合你,本文省去和C++相似的地方,挑出重点需要注意的知识点进行讲解。 原文较长(约 1.5 万字),但浅显易懂,讲解生动活泼,几乎覆盖了初学者入门所需的全部编程语法及概念,请读者耐心阅读。本文所有知识点都是非常重要的!!! 中文翻译由“野比 ”同学提供

2013-06-08

费用管理系统 vc + access

背景:哥儿几个经常一起吃饭,每次总是一起付账,然后每人再给付账人的钱。 若干次后发现非常麻烦,于是写了这个费用管理系统。 费用管理系统 vc + access 数据库已经加密,代码中有解释。 抱歉的是代码没有什么注释,有疑问可以发邮件给janetzhang20@foxmail.com

2012-06-15

C和C++编程规范

华为编程规范和范例 google_c++编程风格指南 C语言编程规范 Linux内核代码风格

2012-03-06

模拟拷贝进程

模拟window拷贝进程,采用avi的方法.

2011-10-03

combobox本身的编辑框和列表框的子类化

实现了对combobox本身的编辑框和列表框的子类化,程序极为简单,编译环境VS2005

2011-09-30

快速字符串搜索

基于MFC和STL平台的字符串类,可以实现在快速字符串搜索。

2011-09-14

使窗口闪烁

运行程序,单击“开始闪烁”按钮,程序循环从一种状态闪烁到另一种状态。

2011-09-13

使用进度条

一个进度条,一个edit box控件,先改变edit box控件中的百分比字样,接着改变进度条的百分比

2011-09-12

利用剪贴板实现Exe程序间的数据交换

在 Windows 中经常会使用剪贴板在不同程序间进行数据交换。本例以交换字符串为例介绍如何在程中利用剪贴板实现 EXE 程序间的数据交换。

2011-09-08

空空如也

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

TA关注的人

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