Linux程序退出处理
Linux程序退出处理在编程Linux软件的时候,我们会考虑这么一件事情,当程序退出执行(即用Ctrl+C或者其他方式)时,该如何做程序的手尾工作,保存数据呢?避免直接强制退出造成丢失数据等后果。 那么我们就会用到信号这个东西 12345678910111213struct sigaction sa; // 创建一个局部变量 sa,存放“信号处理方案”memset(&sa, 0, sizeof(sa)); // 先清零,避免结构体里有脏数据sa.sa_handler = onSignalStop; // 收到指定信号后调用onSignalStopsigemptyset(&sa.sa_mask); // 处理这个信号的时候,不额外屏蔽别的新信号sigaction(SIGINT, &sa, NULL); // 将SIGINT(Ctrl+C)绑定到这套方案sigaction(SIGTERM, &sa, NULL); // 将请求程序退出绑定到这套方案static void onSignalStop(int signum){ (...
C++测代码执行速度
C++测代码执行速度头文件使用 C++11 标准库 <chrono> 头文件: 1#include <chrono> 核心 API 类型/函数 作用 std::chrono::high_resolution_clock::now() 获取当前时间点(纳秒级高精度) std::chrono::duration<double, std::milli> 转换为毫秒 double 类型 .count() 提取数值 实现例子1234auto start_total = std::chrono::high_resolution_clock::now();// ... 被测代码 ...auto end_total = std::chrono::high_resolution_clock::now();double total_ms = std::chrono::duration<double, std::milli>(end_total - start_total).count(); 嵌入式注意事项 编译开销:...
C语言通信包结构体
C语言通信包结构体在C语言网络通信(UDP/TCP)中,设计包结构体(Packet Structure)是核心环节,直接关系到数据的正确传输、解析效率以及跨平台兼容性。以下是设计网络通信包结构体时必须关注的关键细节: 先来看看正确的例子 123456789101112131415#include <stdint.h>// 1. push: 将当前的对齐设置压入栈中保存(保护现场)// 1: 临时设置为 1 字节对齐#pragma pack(push, 1)typedef struct { uint8_t header; // 1 字节 uint32_t length; // 4 字节 uint8_t data[10]; // 10 字节 // 总大小严格为 15 字节,无填充} Packet;// 2. pop: 从栈中弹出之前的设置并恢复(恢复现场)#pragma pack(pop) 字节对齐(Byte Alignment)与填充(Padding)这是网络通信中最容易踩坑的地...
前向传播函数
前向传播函数是什么?什么是前向传播?前向传播(Forward Propagation)就是神经网络处理输入数据、产生输出的过程。 生活类比想象一个工厂流水线: 12345678910111213原材料(输入图像) ↓工位1:提取边缘特征 ↓工位2:提取纹理特征 ↓工位3:提取高级语义 ↓质检:压缩特征 ↓包装:分类结果 ↓成品(预测类别) 这个从原材料到成品的整个过程,就是前向传播。 在代码中的体现1234567891011121314151617181920def forward(self, x): """ 前向传播函数 参数: x: 输入张量,形状为 (batch_size, 3, 64, 64) 返回: 输出张量,形状为 (batch_size, num_classes) """ # 第一层卷积特征提取 x = self.conv1(x) # 第二层卷积特征提取 x = self.conv2(x)...

