- 博客(89)
- 收藏
- 关注
原创 别再‘回调’了!来感受Qt信号槽的丝滑通信
Qt信号与槽机制详解 本文深入探讨Qt框架中信号与槽机制的具体使用方法。信号与槽是Qt特有的对象间通信机制,包含三个核心要素:信号源、信号类型和槽函数。通过connect函数可将信号与槽绑定,实现自动回调功能。 文章详细介绍了: 内置信号与槽的使用方法 自定义槽函数的两种实现方式(手动connect和自动命名规则) 自定义信号的声明与触发(使用emit关键字) 信号与槽的参数传递规则 通过具体代码示例展示了如何创建信号与槽的连接,以及如何实现自定义信号和槽函数来完成特定功能。信号与槽机制是Qt实现GUI事件
2025-12-18 09:59:48
1250
1
原创 打开新世界的大门:初探Qt的魔法世界
本文介绍了使用Qt框架开发图形界面的两种实现方式:通过Qt Designer进行可视化设计,以及直接编写代码创建控件。文章详细演示了如何添加Label、LineEdit和PushButton控件,并实现点击按钮切换文本的功能。重点讲解了Qt的对象树机制,该机制通过父子关系自动管理控件生命周期,避免内存泄漏。文中还对比了两种实现方式的差异,并指出实际开发中常将两者结合使用。最后简要提及了Qt信号槽机制的基本用法,为后续深入学习奠定基础。
2025-12-08 20:29:45
1347
原创 告别配置地狱!手把手带你爽快搭建Qt开发环境
本文介绍了Qt开发环境的搭建和第一个项目的创建过程。主要内容包括:1)Qt SDK安装步骤及组件选择,推荐使用MinGW编译器;2)环境变量配置的重要性;3)通过Qt Creator创建新项目的详细流程,包括选择项目类型、设置路径、配置类信息和构建系统等;4)简要说明了Qt SDK中的核心工具(Assistant、Designer、Linguist和Qt Creator)的功能。最后演示了项目编译运行成功后的窗口效果,并提示中文路径可能导致编译失败的问题。
2025-12-01 13:55:52
971
原创 C++11 多线程与并发编程
C++11线程库简介:统一封装跨平台线程接口,增强代码可移植性。介绍了thread线程库的构造方式(无参/带参/移动构造)、常用成员函数(join/detach等)及线程ID获取方法。重点分析了join与detach的资源回收机制,探讨了线程函数参数传递的三种解决方案(std::ref/传地址/lambda捕获)。最后简要说明了mutex互斥锁的基本用法(lock/unlock等),为后续多线程编程奠定基础。(148字)
2025-10-12 23:10:57
1610
32
原创 C++项目:仿muduo库高并发服务器
摘要 本文介绍了基于muduo库One Thread One Loop线程模型的高并发服务器实现方案。项目采用主从Reactor模型,主Reactor负责新连接建立,子Reactor处理通信事件和业务逻辑,通过"一线程一循环"设计提升并发性能。核心模块包括: SERVER模块 Buffer模块:实现用户态缓冲区,保证数据完整性 Socket模块:封装套接字操作 Channel模块:管理描述符IO事件及回调 协议模块 提供HTTP等应用层协议支持 项目产出为可复用的高并发服务器组件,开发者
2025-09-25 21:40:07
1573
3
原创 C++项目:仿muduo库高并发服务器--------Any类的实现
本篇文章是博主在学习仿muduo库高并发服务器项目所用到的功能模块,旨在设计一个可以存储任意类型的Any类。
2025-09-25 21:29:30
563
原创 C++项目:仿muduo库高并发服务器------buff模块的实现
本篇文章是博主在学习仿muduo库高并发服务器项目所需要的Buffer模块,帮助服务器临时存储请求信息、应答信息。功能:用于实现通信套接字的用户态缓冲区意义:防止接收到的数据不是一条完整的数据(提示:TCP面向字节流),因此对接收的数据进行缓冲对客户端响应的数据,应该是在套接字可写的情况下进行发送功能设计:向缓冲区中添加数据从缓冲区中取出数据。
2025-09-25 21:28:44
544
原创 C++项目:仿muduo库高并发服务器-------时间轮定时器
本篇文章介绍的实现TimerQueue模块需要用到的语法知识、结构设计、以及具体代码实现,学习时请结合具体项目学习。TimerQueue模块是实现固定时间定时任务的模块,可以理解就是要给定时任务管理器,向定时任务管理器中添加⼀个任务,任务将在固定时间后被执行,同时也可以通过刷新定时任务来延迟任务的执行。功能:定时任务模块,让任务能在指定时间后执行意义:组件内部用于释放非活跃连接(希望非活跃连接在N秒后被释放 )功能设计:添加定时任务刷新定时任务(使定时任务重新开始计时 )取消定时任务。
2025-09-25 21:28:02
838
原创 C++项目:仿muduo库高并发服务器-------poller模块
这篇文章介绍了一个基于epoll系统调用封装的Poller模块,主要用于简化文件描述符的IO事件监控操作。模块包含添加、修改和移除事件监控功能,通过Channel模块管理描述符及其对应事件。设计上封装了epoll操作句柄,使用epoll_event结构数组保存活跃事件,并利用哈希表关联描述符与Channel对象。当描述符就绪时,通过哈希表查找对应的Channel来处理事件。该模块实现了对多个描述符的高效监控管理。
2025-09-25 21:27:00
307
原创 C++项目:仿muduo库高并发服务器-------Channel模块实现
文章摘要:本文介绍了Channel模块的设计与实现,该模块用于管理描述符的IO事件。主要功能包括:1)事件管理(监控/解除可读、可写等事件);2)事件触发处理(设置不同事件的回调函数)。代码实现了一个Channel类,包含描述符、事件状态以及各类回调函数,提供了事件监控、取消监控和事件处理等方法。该模块与其他模块关联性强,需结合完整项目代码学习。
2025-09-25 21:23:48
340
原创 C++项目:仿muduo库高并发服务器-------connection模块
摘要 Connection模块是网络通信框架中的核心组件,负责对通信连接进行整体管理。它封装了Buffer、Socket和Channel模块,提供连接建立、数据收发、协议切换等功能。模块通过事件回调机制实现灵活的业务处理,支持非活跃连接超时释放等特性。核心设计包括:连接状态管理(DISCONNECTED/CONNECTING/CONNECTED/DISCONNECTING)、线程安全的异步操作(通过EventLoop执行)、双向缓冲区管理(输入/输出缓冲区)以及多协议支持(通过Upgrad方法动态切换处理逻
2025-09-25 21:22:45
380
原创 C++项目:仿muduo库高并发服务器------EventLoop模块的设计
本文介绍了仿muduo库高并发服务器中的EventLoop模块设计。该模块采用"one thread one loop"思想,每个EventLoop对应一个线程,负责监控和管理所有连接事件。文章重点阐述了线程安全问题的解决方案:通过将连接操作封装为任务并放入队列,确保所有操作在对应线程执行。代码实现包含事件通知机制(eventfd)、任务队列管理、线程绑定等功能,保证高并发下的线程安全。EventLoop模块作为服务器的核心组件,综合了其他模块功能,对实现高性能服务器至关重要。
2025-09-25 21:21:20
598
原创 C++项目:仿muduo库高并发服务器---------LoopThreadPool模块和TcpServer模块的实现
本文介绍了LoopThreadPool和TcpServer两个核心模块的设计与实现。LoopThreadPool模块用于管理LoopThread,支持可配置的线程数量(0或多个),实现线程分配功能,采用轮转算法为新连接分配处理线程。TcpServer模块整合各组件,提供服务器快速搭建能力,包含Acceptor对象、EventLoop对象、连接管理等功能,支持设置多种回调函数和非活跃连接超时销毁。两个模块协同工作,主线程获取新连接后,通过LoopThreadPool分配处理线程,实现高效的事件监控与处理。
2025-09-25 21:12:36
1087
原创 深入解析Mysql数据库并发:从读写机制到多版本控制
MySQL事务隔离与MVCC机制解析 本文深入探讨了MySQL事务隔离性的实现原理,重点分析了MVCC(多版本并发控制)技术如何解决数据库并发场景下的读写冲突问题。文章首先介绍了数据库并发的三类场景(读-读、读-写、写-写),指出读-写和写-写操作存在的线程安全风险。 核心内容围绕MVCC的实现机制展开,详细讲解了三个关键组件:隐藏字段(DB_TRX_ID、DB_ROLL_PTR、DB_ROW_ID)、undo日志和Read View。通过实例演示了MVCC如何通过版本链实现"快照读",
2025-09-19 14:10:43
1042
28
原创 Mysql数据库事务全解析:概念、操作与隔离级别
MySQL事务摘要 MySQL事务是数据库操作的核心概念,由一组逻辑相关的DML语句组成,遵循ACID四大特性:原子性(要么全成功要么全回滚)、一致性(保证数据完整性)、隔离性(并发控制)和持久性(数据永久保存)。 事务操作包括自动提交和手动提交两种方式,通过start transaction/begin启动事务,使用savepoint设置回滚点,commit提交或rollback回滚。单条SQL默认也是事务,依赖autocommit设置决定是否自动提交。 MySQL支持不同隔离级别(读未提交、读提交、可重
2025-09-15 23:49:40
4320
41
原创 MySQL 索引:结构、对比与操作实践指南
MySQL索引优化原理摘要 MySQL通过索引机制优化查询性能,其核心原理是减少磁盘IO次数。索引类似于书籍目录,通过B+树结构组织数据。InnoDB引擎以16KB的页(page)为基本IO单位,使用缓冲池(BufferPool)缓存热点数据。 索引底层采用多级B+树结构,包含目录页和数据页。目录页存储下级页的最小键值,形成层级查找路径。这种结构使得查询只需加载部分页到内存,大幅减少IO次数。相比链表、二叉树等结构,B+树具有更矮的高度和更好的范围查询性能。 InnoDB采用聚簇索引,将数据与索引存储在同一
2025-08-26 10:10:10
4227
36
原创 MySQL 函数大赏:聚合、日期、字符串等函数剖析
MySQL常用函数详解:本文介绍了MySQL中三类常用函数:聚合函数、日期函数和字符串函数。聚合函数部分通过学生成绩表演示了COUNT、SUM、AVG等函数的使用;日期函数部分展示了日期提取、加减运算等操作;字符串函数部分则说明了对表中数据的处理方式。文章以实际操作为主,配合示例表格和SQL语句,帮助读者快速掌握MySQL函数的基本应用。
2025-08-18 12:02:26
5153
37
原创 MySQL 数据操作全流程:创建、读取、更新与删除实战
MySQL核心操作CURD指南 本文介绍了MySQL数据库中最基本的增删改查操作(CURD)。主要内容包括: 数据创建(Create): 单行/多行数据插入 全列插入与指定列插入 主键冲突时的更新与替换 数据查询(Retrieve): 全列查询与指定列查询 查询表达式计算 结果去重(DISTINCT) WHERE条件筛选(比较运算符与逻辑运算符) 数据更新与删除(Update/Delete) 特殊处理: NULL值比较的特殊语法 主键冲突时的处理方案 文章通过创建学生表和成绩表的示例,详细演示了各种SQL语
2025-08-11 14:43:58
8478
50
原创 MySQL 约束知识体系:八大约束类型详细讲解
本文详细介绍了MySQL中常用的七种约束机制,包括空值约束(null/not null)、默认值约束(default)、注释约束(comment)、零填充约束(zerofill)、主键约束(primary key)、自增约束(auto_increment)和唯一约束(unique key)。重点阐述了各种约束的应用场景、语法实现及相互之间的区别与联系,如主键与唯一键的核心差异在于主键不允许NULL值且每表只能有一个,而唯一键允许多个NULL值。文章通过具体SQL示例演示了各类约束的实际应用,帮助读者理解如何
2025-08-04 13:51:31
2476
33
原创 MySQL的常用数据类型详解
本文介绍了MySQL中常用的数据类型,包括数值类型(tinyint、bit、float、decimal)、字符串类型(char、varchar)、日期时间类型(date、datetime、timestamp)以及枚举和集合类型(enum、set)。文章通过示例演示了各类型的特点和使用限制,如tinyint的范围约束、float的精度丢失问题、varchar的变长存储特性等,并强调了数据类型本身作为MySQL约束机制的重要性。此外,还详细说明了各类型的存储需求和使用场景,帮助开发者合理选择数据类型,确保数据的
2025-07-28 12:32:48
2302
31
原创 MySQL表的基础操作
本文介绍了MySQL表操作的基础知识,主要包括创建表、查看表结构、修改表和删除表等操作。在创建表时,可以指定列名、数据类型、字符集和存储引擎等属性。查看表结构使用DESC命令,插入数据使用INSERT语句。修改表结构包括新增列、删除列、修改字段类型和列名等操作,通过ALTER TABLE语句实现。最后,删除表使用DROP TABLE命令。文章以示例代码展示了每个操作的具体语法和效果,适合了解MySQL库操作的用户学习参考。
2025-07-21 12:49:24
1702
34
原创 MySQL数据库的基础操作
MySQL数据库基础操作指南 本文介绍了MySQL数据库的基本操作,包括创建、查看、修改、备份恢复和删除数据库的方法。主要内容涵盖: 创建数据库:使用CREATE DATABASE语句,可指定字符集和校验集 查看数据库:包括查看当前库、默认字符集/校验集、特定库属性等 字符集与校验集:解释了字符集和校验集的概念,演示了不同校验规则对数据的影响 修改数据库:使用ALTER DATABASE语句修改字符集或校验集 备份与恢复:使用mysqldump命令备份数据库,source命令恢复数据 删除数据库:使用DRO
2025-07-14 15:09:42
4340
33
原创 深入解析TCP:可靠传输的核心机制与实现逻辑(三次握手、四次挥手、流量控制、滑动窗口、拥塞控制、慢启动、延时应答、面向字节流、粘包问题)
Linux TCP协议:连接建立与断开的机制解析 本文深入剖析了TCP协议的核心机制,重点讲解了TCP连接的建立与断开过程。在连接建立方面,详细描述了三次握手流程及其状态变迁,分析了三次握手在验证全双工通信、防止资源浪费和防御SYN洪水攻击中的重要作用。在连接断开方面,系统阐述了四次挥手过程,解释了TIME_WAIT状态的意义以及CLOSE_WAIT状态可能导致的资源泄漏问题。文章还通过对比分析,说明了TCP协议如何通过状态机管理和报文交互机制,确保可靠传输的同时优化资源利用效率,为读者理解TCP协议的内在
2025-07-07 18:50:58
3069
32
原创 深入解析TCP:可靠传输的核心机制与实现逻辑
本文系统介绍了TCP协议的核心概念与实现机制,内容涵盖TCP协议的特点、协议段格式及关键实现技术。TCP作为面向连接的可靠传输协议,具有连接导向性、点对点通信、可靠交付、全双工通信和面向字节流等特点。文章详细解析了TCP报文格式中各字段的作用,包括端口号、首部长度、窗口大小等,重点阐述了确认应答(ACK)机制、超时重传机制以及序号系统如何协同工作保障数据传输可靠性。此外还初步介绍了流量控制的基本原理,通过窗口大小动态调整收发速率。这些机制共同构成了TCP协议实现可靠传输的基础框架,后续文章将继续深入解析连接
2025-06-30 18:54:56
2981
46
原创 【Linux系统】Linux环境变量:系统配置的隐形指挥官
环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息。理解环境变量对于系统管理、软件开发都很重要。
2025-06-09 23:15:11
2441
4
原创 Linux信号保存与处理机制详解
理解Linux信号的保存与处理机制,需掌握信号的生命周期(产生、保存、递送)、处理函数的设计约束(可重入性、安全性),以及多线程环境下的复杂性。合理使用信号能提升程序的健壮性,但需谨慎处理异步事件带来的挑战。
2025-06-09 23:13:47
1204
1
原创 Linux线程与进程关系及底层实现
因此,在高并发场景(如 Web 服务器、数据库)中,线程的轻量级切换特性使其更适合作为并发的基本单位,尤其在多核 CPU 和缓存层次结构复杂的现代计算机中,优势更加显著。,尤其是对 CPU 缓存(如 L1/L2/L3)和 TLB(Translation Lookaside Buffer)的影响。在操作系统中,线程切换相比进程切换更轻量级的关键原因之一是。线程切换更轻量级的本质在于。
2025-06-09 23:10:13
1181
原创 从内核到应用层:Linux缓冲机制与语言缓冲区的协同解析
这篇文章摘要:本文探讨了用户缓冲区的概念及其在文件I/O中的影响。通过多个代码示例展示了标准输出函数与系统调用write的行为差异,特别关注了fork()和close()操作对缓冲区的影响。关键发现包括:1) C库函数(printf/fprintf/fwrite)会先将数据存入用户缓冲区,而write直接写入内核缓冲区;2) 换行符会触发用户缓冲区的刷新;3) 文件重定向时,fork()会导致用户缓冲区内容被复制。文章详细解释了用户缓冲区与内核缓冲区的关系,并提供了图解说明数据从用户空间到内核空间的传输
2025-06-05 21:21:30
1909
原创 深入Linux网络栈:套接字接口工作机制与端到端通信开发
本文衔接上篇网络基础内容,重点介绍了跨网络通信机制。首先补充了令牌环网的原理,指出其通过令牌控制实现单主机通信,避免冲突。随后深入解析跨网络传输中IP地址和Mac地址的协同作用:IP负责全局寻址,Mac定位局域网跳转。文章进一步揭示网络通信本质是进程间交互,引入端口号作为进程标识,结合IP构成套接字实现进程定位。
2025-05-26 12:18:58
3014
46
原创 Linux网络基础全面解析:从协议分层到局域网通信原理
本文介绍了Linux网络部分的基础概念,重点讲解了计算机网络的背景、协议分层、OSI七层模型、TCP/IP协议栈以及网络协议在网络传输中的作用。
2025-05-20 16:30:50
3522
41
原创 C++11详解
C++11引入了多项新特性,显著提升了代码的灵活性和开发效率。首先,列表初始化通过{}语法扩展了初始化范围,适用于内置类型和用户自定义类型,并引入了std::initializer_list类型,方便处理初始化列表。其次,auto关键字实现了自动类型推断,简化了复杂类型的定义,而decltype则弥补了auto在编译期类型推导的不足。此外,C++11引入了右值引用和移动语义,解决了左值引用在返回局部变量时的短板,通过std::move和std::forward实现了资源的高效转移和完美转发,减少了深拷贝的开
2025-05-12 13:48:53
2018
42
原创 Linux内核视角:线程同步与互斥的原理、实现与锁优化策略
在前两篇文章中,我们已经对线程的相关概念及基本操作进行了深入介绍。在本篇中,我们将深入探讨编写多线程程序时非常重要的一个环节——保证线程的同步互斥,以此确保程序执行结果的正确性。线程互斥是一种重要的并发控制机制,其核心在于同一时刻仅允许单个线程访问共享资源。借助互斥机制,当某个线程正在对共享内存进行读写操作时,其他线程会被暂时阻止访问同一资源。这一约束能够有效规避竞态条件——即多个线程同时访问和修改共享数据可能引发的不可预测行为,从而确保数据的一致性和程序执行的正确性。
2025-05-06 23:08:27
2367
47
原创 驾驭Linux多线程:控制、分离与高效管理的关键策略
上篇文章,我们已经介绍了,线程的基本概念和实现,本篇我们来学习线程的创建和使用。线程的基本概念本篇我们围绕Linux系统下的线程编程展开,核心内容涵盖线程的实现原理、创建、管理、等待及分离等方面。具体而言,Linux内核以“轻量级进程”模拟线程,复用进程数据结构与调度机制,POSIX线程库对clone()系统调用封装,为开发者提供线程编程接口。线程创建通过实现,需手动链接pthread库;线程管理涉及clone系统调用及线程库对线程控制块(TCB)的维护;线程等待使用。
2025-05-03 14:07:03
1795
42
原创 Linux线程与进程:探秘共享地址空间的并发实现与内存映射
在Linux操作系统中,线程作为CPU调度的基本单位,起着至关重要的作用。深入理解线程控制机制,是学习Linux系统不可或缺的重要环节。本篇文章我主要介绍,线程的概念、线程与进程的关系及线程在Linux下的实现。有些性质我会放在下篇介绍,本篇主要介绍概念线程的优点创建一个新线程的代价要比创建一个新进程小得多与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多线程占用的资源要比进程少很多能充分利用多处理器的可并行数量在等待慢速I/O操作结束的同时,程序可执行其他的计算任务。
2025-04-26 18:19:30
1638
27
原创 从内核到应用层:深度剖析信号捕捉技术栈(含sigaction系统调用/SIGCHLD回收/volatile内存屏障)
Linux系统中,信号捕捉是指进程可以通过设置信号处理函数来响应特定信号。通过信号捕捉机制,进程可以对异步事件做出及时响应,从而提高程序的健壮性和灵活性。
2025-04-24 18:39:03
1651
52
原创 Linux信号的产生
识别,操作系统根据中断向量表给进程发送信号,信号被进程捕捉执行我们自己的方法,执行完毕返回进程并没有被退出,进程继续被调度,但是进程上下文数据并没有修改,溢出标志位一直为1,可以看到当我们的程序设置闹钟后,就可以通过捕捉信号,完成指定任务的执行行,这种方式我们一般用来格一段时间,来打印一次日志信息。上面的两个例子都是由硬件产生的,但是异常还可以由软件产生,这点我在管道部分介绍过了,下面会直接用作示例来介绍新的知识。我们对于异常的处理,一般都为终止进程,并不会尝试修复它,而这些异常信号可以被捕获,是。
2025-04-22 20:36:39
1339
14
原创 从内核到用户态:Linux信号内核结构、保存与处理全链路剖析
Linux系统中,信号的保存涉及内核为每个进程所维护的结构体对象,确保信号在产后、到进程处理前被正确的记录和管理,本篇文章我们将深入探索进程对信号的保存与处理。Linux通过pending集合和blocked掩码管理信号保存,标准信号与实时信号分别采用位图和队列实现不同语义。理解这些机制有助于编写健壮的信号处理代码,避免竞态条件和信号丢失。Linux处理信号实在身份切换时,对信号进行检测和处理的。Linux执行普通代码和系统代码时,会进行身份的切换,这很好的保证了,系统资源的安全性。
2025-04-20 23:52:02
3186
50
原创 Linux信号三部曲:产生机制、处理方式与内核接口
Linux中,信号(Signal)是一种进程间通信(IPC)的机制,它用来通知进程发生了特定的事件。进程接受到信号后会根据信号的类型结合自己的处理方式做出相应的处理。特点:异步传递(随时可能中断进程)SIGINT(2):由键盘输入Ctrl+C产生,用于中断正在运行的进程。SIGKILL(9):强制终止进程,不能被捕获和忽略,用于紧急情况下终止进程。SIGSTOP(19):暂停进程,不能被捕获和忽略,可使用SIGCONT信号恢复进程运行不可捕获的信号SIGKILL(9)和SIGSTOP(19)
2025-04-17 21:22:28
3240
42
原创 深度剖析 Linux 共享内存:基本概念、系统调用及代码实现
Linux共享内存是一种高效的进程间通信(IPC)机制,允许多个进程直接访问同一块物理内存区域,避免了数据在用户空间和内核空间的多次拷贝。本篇我将通个多个模块来介绍它的特点及使用。
2025-04-15 21:32:56
2009
36
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅