- 博客(30)
- 收藏
- 关注
原创 C++中单例模式详解
C++单例模式确保类只有一个实例并提供全局访问点。该模式适用于需要全局唯一对象的场景,如配置管理、日志记录、数据库连接池等,可避免资源冲突和状态不一致问题。以ClientCtrl类为例,通过私有构造函数、静态成员变量和方法实现单例,集中管理对话实例、后台线程和消息处理。关键实现包括延迟初始化、防止外部实例化、提供全局访问接口,并建议添加线程安全机制。该设计符合MVC模式控制层需求,有效协调视图和模型交互。
2025-05-29 22:26:01
869
原创 C++中回调函数详解
回调函数是无数实际项目中解耦模块、实现异步处理、构建事件驱动架构的核心基石。回调函数允许将一段可执行的代码(函数)像数据一样传递给其他模块。接收方模块可以在其认为合适的时机——通常是某个特定事件(如按钮点击、数据到达、定时器到期)发生后——“回调”我们预先提供的这段代码。这种机制赋予了软件极大的灵活性:通用模块负责“何时”触发,而专用模块则负责“做什么”,两者各司其职,互不干扰。
2025-05-27 22:33:27
680
原创 【保姆级教程】TortoiseGit安装和Visual Studio2019插件配置详细说明
TortoiseGit 是一款专为 Windows 用户设计的免费开源 Git 客户端,它巧妙地将强大的 Git 版本控制功能集成到 Windows 资源管理器的右键菜单中。用户无需记忆复杂的命令行指令,即可通过直观的图形界面轻松完成提交、拉取、推送、分支管理、合并代码以及查看历史记录等常用 Git 操作,并通过图标覆盖直观了解文件状态,极大地简化了 Windows 环境下的 Git 使用体验,使版本控制对于开发者乃至非技术用户都更加友好和高效。
2025-05-26 23:04:02
516
原创 C++11新特性高频知识点深度剖析,看完这篇就够了!(下)
C++11 带来了许多重要的新特性,极大地提升了 C++ 的易用性、安全性和性能,彻底改变了现代 C++ 的编程方式。我将从最常用、影响最广泛的特性开始,逐一进行详细解释。
2025-05-25 16:37:03
978
原创 C++11新特性高频知识点深度剖析,看完这篇就够了!(上)
C++11 带来了许多重要的新特性,极大地提升了 C++ 的易用性、安全性和性能,彻底改变了现代 C++ 的编程方式。我将从最常用、影响最广泛的特性开始,逐一进行详细解释。
2025-05-24 22:57:29
1398
原创 深度剖析并发I/O模型select、poll、epoll与IOCP核心机制
select、poll、epoll 和 IOCP 是四种用于提升服务器并发处理能力的I/O模型或机制。前三者主要属于I/O多路复用范畴,允许单个进程或线程监视多个I/O流的状态;而 IOCP 则是一种更为彻底的异步I/O模型。
2025-05-23 22:57:47
2156
原创 Linux中 I/O 多路复用机制的边缘触发与水平触发
Linux在 epoll 或其他 I/O 多路复用机制中,触发模式是指如何触发文件描述符的事件。触发模式决定了何时会通知程序处理该文件描述符的 I/O 操作。常见的触发模式有 边缘触发(ET) 和 水平触发(LT)。
2025-05-22 22:26:20
2125
原创 Linux中I/O复用机制epoll
Linux中的epoll 是一种 事件驱动的 I/O 复用机制,主要解决了传统的 select 和 poll 的性能瓶颈。它的出现,主要是为了更高效地处理成千上万的连接。
2025-05-21 22:55:33
2242
原创 Linux中的 I/O 复用机制 select
select 是一种经典的I/O复用(I/O Multiplexing)机制。它允许一个单独的线程或进程监视多个文件描述符(File Descriptors, FDs)的状态变化。这些文件描述符可以代表多种I/O资源,例如网络套接字(sockets)、管道(pipes)、终端设备,甚至是普通文件。select能够同时等待这些被监视的文件描述符中的任何一个变为“就绪”状态,例如可读、可写,或者发生某种异常情况。
2025-05-20 22:58:51
2150
原创 Linux利用多线程和线程同步实现一个简单的聊天服务器
实现一个基于TCP/IP的简单多人聊天室程序。它包含一个服务器端和一个客户端:服务器能够接收多个客户端的连接,并将任何一个客户端发来的消息广播给所有其他连接的客户端;客户端则可以连接到服务器,发送消息并接收来自其他人的消息。该Demo运用了网络编程(Socket API)、多线程(Pthreads)以及线程同步(互斥锁)技术,以实现并发处理和数据共享安全。
2025-05-19 22:56:50
3176
原创 Linux线程同步信号量
信号量(Semaphore) 是一种用于线程同步和进程间通信的机制,它用于控制多个线程对共享资源的访问。在 Linux 中,信号量通常用于防止多个线程同时访问有限的资源,从而避免出现数据竞争(race condition)和死锁(deadlock)等问题。
2025-05-17 22:59:08
2431
原创 Linux线程互斥锁
互斥锁(Mutex,Mutual Exclusion) 是一种用于多线程编程的同步机制,用于保护共享资源(如变量、内存、文件等),确保在同一时刻只有一个线程可以访问共享资源。互斥锁的目的是防止多个线程同时访问共享资源,避免由于并发操作引发的数据竞争(race condition)和不一致的结果。
2025-05-15 22:43:37
2366
原创 Linux中的消息队列(Message Queue)
消息队列是Linux中进程间通信(IPC)的一种方式,它允许一个进程将结构化的数据块(消息)发送到队列中,另一个进程可以按照特定的规则从队列中获取消息。
2025-04-19 10:18:53
2063
原创 Linux 信号处理
在 Linux 编程中,信号处理 是一种异步事件处理机制,用于响应系统或用户触发的特定事件(如定时器超时、键盘中断等)。下面详细解析信号处理的核心机制,围绕 SIGALRM 和 SIGINT 信号展开说明。
2025-04-15 23:14:21
1748
原创 Linux网络编程之UDP 回声服务器与客户端
Linux网络编程之UDP 回声服务器与客户端:这个Demo主要演示了如何在Linux环境下使用UDP协议实现一个简单的回声服务器(Echo Server)以及与之对应的客户端应用程序。
2025-04-14 22:45:40
2348
原创 Linux中lseek 函数
在 Unix/Linux 系统中,每个打开的文件都有一个“读写指针”,也就是记录下一次读写操作应该从哪个位置开始。函数 lseek 就用于修改这个指针的位置。
2025-04-08 15:20:37
1678
原创 Leetcode力扣解题记录--第27题(双指针)
在一开始时,慢指针slow和快指针都处于0号位置,但是在算法的进行过程中,遇到目标值val时,fast指针会跳过,所以fast始终是大于等于slow,再将非目标值赋值给nums[slow],最终返回slow,也就是新的不含val值的最后一个元素的下标。简单思想:两层for循环,遇到val值第二层for循环把后续的元素依次往前移动,进入一次二层循环flag就加一,最后返回nums.size() - flag就行了。你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。
2025-01-26 12:01:06
1800
原创 Leetcode力扣解题记录--第35题
right指向最后一个小于 target 的元素,那么在 right之后插入 target是符合顺序的,所以 right+1。,证明整个数组都是小于所插入值的,所以最后一步的过程就是right = mid - 1,而mid此时就是第一个元素,下标为0,而right=-1(right<left)循环结束,所以插入的位置就是right+1。同时right<left循环结束,此时right不变还是指向最后一个元素的值,而插入的值大于整个数组的值,故应该返回right+1。就是目标值的插入位置。
2025-01-25 21:54:13
1826
原创 Leetcode力扣记录--第704题
首先,第一步能想到的就是暴力解法,对数组进行从头到尾的遍历,逐个检查数组中的每个元素是否与目标值相等。如果在遍历过程中找到了与目标值相等的元素,就返回该元素的下标;二分查找在很多情况下都是别的算法的搜索基础,时间复杂度会比普通搜索小,其基本思想是将查找区间不断地分成两部分,通过比较中间元素与目标值的大小关系,来缩小查找范围,每次都能排除一半的元素,从而快速定位目标值。对于二分查找来说,写代码时要注意的就是数组的区间,我用的就是左闭右闭区间,按照这一套代码记住就行了。,如果目标值存在返回下标,否则返回。
2025-01-25 21:22:30
1671
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人