- 博客(37)
- 收藏
- 关注
原创 C++多线层join/detach记录
本文介绍了C++多线程编程的核心概念与技术,主要包括:1)线程创建与管理(使用std::thread及其join/detach方法);2)共享资源访问中的数据竞争问题及解决方案(互斥锁std::mutex和原子操作std::atomic);3)线程间通信机制(条件变量std::condition_variable)。文章通过具体代码示例展示了如何正确实现线程安全操作,并对比了不同同步机制的性能特点。文中特别强调了在多线程编程中需要注意的资源竞争和线程同步问题,为开发者提供了实用的并发编程指导。
2025-08-05 17:17:19
839
原创 详解C++中的锁
C++多线程编程中,锁是解决数据竞争的核心机制。本文介绍了C++标准库提供的多种锁类型:基本互斥锁(std::mutex)、递归锁(std::recursive_mutex)、定时锁(std::timed_mutex)和共享锁(std::shared_mutex)。同时讲解了RAII风格的锁管理工具(std::lock_guard、std::unique_lock等),它们能自动管理锁的生命周期,避免手动解锁遗漏。文章还分析了死锁发生的四个必要条件,并建议通过统一加锁顺序、减少锁持有时间等策略来预防死锁。这
2025-08-05 11:34:35
741
原创 深浅拷贝与内存回收
本文系统分析了深浅拷贝在内存管理中的核心问题,通过电机管理器代码案例阐释原理。浅拷贝仅复制指针地址,存在悬空指针风险;深拷贝则复制数据内容,确保内存安全。针对函数返回局部变量地址导致的内存生命周期冲突问题,提出两种解决方案:深拷贝数据到外部指针,或直接操作目标内存避免拷贝。文章还制定了内存安全编程SOP,包括指针使用检查清单、深拷贝操作规范及生命周期管理决策树,并推荐使用智能指针和防御性编程进行加固。最后总结关键原则:确保数据生命周期、避免返回栈内存、明确指针所有权,并提供代码审查清单以规避常见内存错误。
2025-08-05 11:11:41
745
原创 Vim 核心操作命令速查表
本文总结了Vim编辑器的常用命令分类,包括文件操作、光标移动、删除操作、复制粘贴、撤销重做、查找替换和模式切换等核心功能。文件操作命令如:w保存、:q退出等;光标移动命令包括h/j/k/l方向键和gg/G跳转;删除操作有dd删行和d$删到行尾;复制粘贴使用yy和p;查找替换支持正则表达式;模式切换命令如i进入插入模式。这些命令组合使用可显著提升文本编辑效率。
2025-08-05 11:04:19
242
原创 Git本地修改与远程仓库交互的技术记录
本文总结了Git本地修改与远程仓库交互的关键操作:1)提交修改需执行git add→commit→push完整流程;2)丢弃修改使用git restore命令,不可恢复需谨慎;3)本地保留修改分两种情况:临时不提交只需不执行git add,永久忽略需配置.gitignore并移除跟踪。强调本地与远程仓库的独立性,未推送的提交不会影响远程仓库。建议根据需求选择合适操作方式,特别注意丢弃修改前的数据备份和永久忽略文件的正确处理流程。
2025-08-05 11:00:32
267
原创 Git Stash 与 Pull 冲突解决技术记录
本文介绍了使用 git stash apply 合并暂存修改与远程更新时产生冲突的解决方法。当暂存内容与远程更新的文件存在重叠修改时,Git 会标记冲突。冲突文件会显示 both modified 状态,并包含 ours(远程更新)和 theirs(本地暂存)的修改内容。解决方案包括:保留远程修改(git checkout --ours)、保留暂存修改(git checkout --theirs)或手动合并(推荐)。手动合并需编辑冲突文件,整合双方有效内容后标记解决(git add),最后提交合并结果。通过
2025-08-05 10:51:25
324
原创 Git-常用命令大全
Git 常用命令速查表 本文提供了 Git 常用命令的快速参考,包括仓库管理、状态查看、提交操作、分支管理、远程同步等核心功能。通过表格形式清晰展示了命令分类、具体命令、功能描述和使用示例。还包含了日常开发工作流命令组合,如新建分支开发、修复紧急BUG等场景下的典型命令序列。特别提示了可视化查看提交历史的命令git log --oneline --graph --decorate,并附有 Git 工作流速查图链接。
2025-08-05 10:47:41
466
原创 C++ 中参数传递方式的技术记录
本文总结了C++中三种参数传递方式的技术特点:1)值传递创建参数副本,保护原始数据但存在复制开销,适用于基本类型和小型结构;2)引用传递直接操作原始变量,避免复制大型对象,需确保对象非空;3)常量引用兼具效率与安全性,适合传递不可修改的大对象。通过相机管理代码实例,展示了不同场景下的参数传递选择,并对比了引用与指针的差异,指出引用传递更安全简洁。设计上遵循了避免不必要复制、保证安全性、语义清晰等C++最佳实践原则。
2025-08-05 10:40:55
492
原创 Git仓库拉取及更新操作记录
本文记录Git仓库拉取及更新操作流程。完整拉取步骤包括:克隆仓库、安装commit-msg钩子、切换开发分支及验证配置。更新操作提供三种方法:无本地修改直接pull;有修改需保留时stash后pull;需放弃修改时checkout重置。操作后需验证提交日志、分支状态及代码差异。配置正确时,git status应显示"Your branch is up to date with 'origin/dev_15'"。
2025-08-05 10:34:03
303
原创 Git-如何配置 .gitignore 并重新推送项目
本文介绍了通过.gitignore文件忽略Git仓库中特定文件/文件夹的操作流程:1)在项目根目录创建.gitignore文件并添加需忽略的路径;2)使用git rm --cached清除已追踪文件的记录;3)提交.gitignore文件并推送更新。该方案可有效避免不必要文件进入版本控制,同时保留本地文件。关键命令包括创建文件、编辑忽略规则、移除追踪记录及强制推送更新。
2025-08-05 10:30:30
228
原创 如何把C#的UI保存为EXE
本文介绍了将VS项目发布为可执行程序的操作步骤:首先选择Release平台,点击生成解决方案;指定存储位置后,将整个生成文件夹复制到新目录;手动添加必要的DLL等依赖文件(图中标红部分);最后双击exe文件即可直接运行程序。该流程适用于需要打包发布VS开发项目的场景,通过补充依赖文件确保程序可独立运行。
2025-08-05 10:27:47
128
原创 Git远程覆盖本地修改
摘要:本文介绍了解决git pull冲突的两种方法(强制重置或暂存本地修改),并详细说明如何用本地UI代码覆盖项目文件(保留.git目录)。操作包括备份项目、复制新代码并确保不覆盖.git目录,最后提交更改。关键步骤包括使用xcopy排除.git、检查文件覆盖情况,以及通过git status/add/commit/push提交变更。注意事项强调备份、保护.git目录和编写清晰提交信息的重要性。
2025-08-05 10:21:44
311
原创 拉取远程Git仓库到本地&上传本地代码到Git仓库
本文详细介绍了规范的代码提交流程,包括克隆仓库、切换分支、同步代码、复制文件、提交修改及推送代码等关键步骤。重点强调了提交信息的格式要求、分支管理规范以及操作注意事项,旨在帮助开发者高效完成代码提交任务,减少冲突和错误,提升团队协作效率。通过遵循此标准化流程,可确保代码版本控制的可靠性和可追溯性。
2025-08-05 10:15:39
673
原创 C#中子线程控制执行逻辑避免UI堵塞的实现记录
摘要: 本文探讨了在C#桌面应用中通过子线程优化UI响应的方法。针对硬件初始化等耗时操作,采用Thread类将任务移至后台执行,通过Invoke确保线程安全的UI更新。对于序列操作(如画十字/矩阵移动),原有Task.Run方案存在停止延迟问题,通过引入CancellationTokenSource实现即时取消,并设计公共辅助函数ExecuteMoveSequenceAsync集成取消检测。改进后的方案包含全局状态标志和统一结果处理,解决了按钮状态不同步和任务无法中断的问题。关键代码展示了线程创建、取消令牌
2025-08-01 13:53:32
786
原创 在C# UI中实现中英文切换:以btnTest按钮为例
本文介绍了在C# Windows Forms应用中实现中英文切换的完整方案。通过创建中英文资源文件(Resources.zh-CN.resx/en-US.resx),添加统一的键值对,并利用ResourceManager和CultureInfo实现动态语言切换。核心步骤包括:初始化资源管理器、编写文本更新方法、添加语言切换按钮事件处理。该方法可扩展性强,只需在资源文件中添加新控件的文本键值对即可支持更多语言和控件。运行测试证明,点击切换按钮能正确实现btnTest按钮文本的中英文转换,为后续国际化开发提供了
2025-08-01 13:47:12
550
原创 C#调用DLL的完整流程
本文提供了C#调用DLL的完整流程指南,重点演示如何通过Windows窗体应用调用AgentSDK.dll的CameraManager_InitCameras函数。主要包括:创建x64平台项目、添加DLL接口绑定代码、实现按钮调用逻辑、拷贝DLL到正确位置等关键步骤。通过DllImport特性声明外部函数,使用IntPtr处理句柄,最终实现点击按钮后显示函数返回值的功能。整个过程强调配置正确性(如x64平台、DLL路径等),适合需要快速实现C#与DLL交互的开发者参考。
2025-08-01 11:43:22
573
原创 使用C++/CLI封装C++ DLL并在C#界面中调用方法
本文详细介绍了将64位C++ DLL封装为C++/CLI类库并在C# Windows Forms应用中调用的全过程。通过六个清晰步骤:准备开发环境、创建解决方案、配置项目、编写包装代码、构建C#界面及测试运行,指导开发者实现从底层DLL到上层界面的完整调用流程。关键点包括正确配置项目属性、创建托管包装类、处理DLL依赖关系等。以CameraManager的initCameras()方法为例,展示了从C++到C#的跨语言调用实现,确保开发者能快速掌握这一混合编程技术。
2025-08-01 11:39:53
706
原创 《C#调用C++的.dll》须知
本文总结了C#调用C++动态链接库(DLL)的五个关键注意事项:1)准确获取函数名、参数类型和调用约定;2)确保平台架构匹配;3)检查并处理所有依赖项;4)正确设置字符集编码;5)精确还原结构体定义。文章强调通过工具验证导出函数信息,匹配32/64位平台,处理依赖链,以及正确声明字符串和结构体参数。每个环节的疏忽都可能导致运行时错误,需通过严格测试确保互操作性。文中的代码示例展示了如何在C#中正确声明外部方法和结构体。
2025-08-01 11:34:46
625
原创 在C#中调用C++编写的DLL(动态链接库)
本文详细介绍了在C#中调用C++编写的DLL的P/Invoke方案。主要包括五个步骤:创建C++ DLL项目(需注意x64平台一致性)、编写带extern "C"修饰的C++函数代码、生成DLL文件、创建C#项目并通过DllImport声明外部方法,以及同步平台设置并复制DLL文件。文章特别强调了平台一致性、调用约定匹配和异常处理等关键点,并提供了完整的代码示例。该方法适用于需要直接调用非托管代码的性能敏感场景,为开发者提供了清晰的实现路径。
2025-08-01 11:29:35
826
原创 Java学习路线
从零基础学员角度出发,知识点编排循序渐进,能够将每一个知识点落地到实际案例,拒绝“听得懂、不会练、不会敲”。通过阶段性小项目, 巩固所学内容, 并进一步提升编程思维,绝对会给你意想不到的惊喜!
2023-04-15 11:09:18
111
原创 MySQL_入门
一、在下载好MySQL后,如何进行数据库的操作呢?①start+R调出运行窗口:②进入命令行后,键入MySQL -u用户名 -p密码,进入操作台③MySQL通用语法注意事项a) SQL语句可以单行或多行书写,并且以分号结尾。b) 可以用空格和缩写来增强语句的可续性c) MySQL数据库的SQL语句不区分大小写,**关键字建议使用大写**d) 注释 i. 单行注释:-- 注释内容 或 #注释内容(MySQL特有) ii. 多行注释:/* 注释*/④MySQL分为四大部分:DDL、D
2022-03-20 15:49:37
188
原创 C_共享栈
考研原题共享栈/双栈来咯!今天写文章已经写到很晚了,有一丢丢疲惫,但还是迫不及待的想把这篇文章发布给大家。嘻嘻????上菜//双栈操作,秀起来!#include <iostream>using namespace std;#define OK 1#define FALSE 0#define ERROR -1#define OVERFLOW -2typedef int SElemType;typedef int Status;//双栈数据结构 typedef str
2021-10-29 21:15:51
166
原创 C_顺序栈
大家晚上好啊~今天带来的是顺序栈。学习的内容有很多,我在平台上仅仅放了一些需要小小记录一下的内容,如果你需要什么与我发布相关的内容,可以留言告诉我哦!上菜!#include <iostream>using namespace std; #define MAXSIZE 100#define OK 1#define FALSE 0#define ERROR -1#define OVERFLOW -2typedef int SElemType; typedef in
2021-10-29 21:10:07
106
原创 C_循环队列
这次我带来了循环队列数据结构老师都是给一堆伪代码…放到程序里面根本不能原型,每个程序还得自己改写成C/C++程序 /(ㄒoㄒ)/~~#include <iostream>using namespace std;//循环队列 #define OK 1#define FALSE 0#define ERROR -1#define OVERFLOW -2 #define MAXQSIZE 100//最大队列长度 typedef int QElemType;typed
2021-10-29 21:05:02
125
原创 Java_Easy—记事本小程序
我又来了,这次带来了“简单版Java记事本”这次的功能有:文件(新建、打开、保存、另存为)、格式(字体设置、大小、颜色、自动换行)、工具(查找替换)写了好多东西,但好像没人看????,那就给自己看!!!冲啊!!!????package KeShe.Study.Day_07;/* * To change this license header, choose License Headers in Project Properties. * To change this template fi
2021-10-29 20:40:49
1057
1
原创 Java_记事本小程序
简介:记事本小程序这是之前写过的一个Java课设的作业,嘿嘿,分享给大家,希望能帮到你哦~功能有:文件(新建、打开、保存、另存为、退出)、编辑(撤销、剪切、复制、粘贴、删除)、格式(自动换行、字体选择、颜色、替换查找)…import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.FlowLayout;import java.awt.Font;import java.
2021-10-29 20:30:35
1184
原创 Java_DP_卖卖股票
输入一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即:买入和卖出一只股票一次),设计一个算法来计算你能获得的最大利润。Tip:不能在买入股票前卖出股票。Eg:输入:7 1 5 3 6 4(空格间隔)输出:5解释:在第二天(股票价格 = 1)的时候买入,在第五天(股票价格为 = 6)的时候卖出,最大利润 = 6-1=5;package DP;import java.util.Scanner;public class list03 { pu
2021-10-05 20:43:43
343
原创 Java_DP_爬楼梯
如果你要爬一个 n 阶的楼梯(n为正整数),每次可以爬 1 或者 2 个台阶。那么你有多少种不同的方法可以爬到楼顶呢?Eg:输入:3输出:3解释:有三种方法可以爬到楼顶→1+1+1、1+2、2+1import java.util.Scanner;public class list02 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(
2021-10-03 21:29:23
222
原创 Java_DP_最大子序和
给定一个整数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。Eg:输入:[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组中[4,-1,2,1]和最大,为6。public class list01 { public static void main(String[] args) { // TODO Auto-generated method stub int []nums= {-2,1,-3,4,-1,2,1,-5,4,100
2021-10-03 21:07:19
149
原创 C语言_统计单词长度
统计输入文本的长度输入一行文本,其中以空格分隔为若干个单词,以.结束。 输出每个单词的长度。 注意,行中可能出现连续的空格;最后的.不计算在内。#include <stdio.h>int main(){ printf("\t\t\t\t\t请输入文本内容,以‘.’结束\n"); char a; int i=0; a=getchar(); while(a!='.') { if(a==' ') { if(i!=0) { printf("%d "
2020-08-05 16:42:15
6194
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人