知识点
文章平均质量分 55
.小笙.
XSM
展开
-
Qt之重写QTreeWidget节点排序
bool MyTreeWidgetItem::operator<(const QTreeWidgetItem& other) const{ QRegExp ax("\\d+$"); QRegExp bx("\\d+$"); int column = treeWidget()->sortColumn(); QString str1 = text(column); QString str2 = other.text(column); ax.indexIn(str1, 0)原创 2021-10-28 17:31:33 · 1005 阅读 · 0 评论 -
Qt之QTableWidget遍历
for(int row=0; row<ui->tableWidget->rowCount(); row++){ for(int col=0; col<ui->tableWidget->columnCount(); col++) { QTableWidgetItem* item = ui->tableWidget_right->item(row,col); }}for(int row=0; row<ui->tableWidget-&原创 2021-10-28 17:28:12 · 2041 阅读 · 0 评论 -
2021-07-14
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-09-29 00:58:15 · 75 阅读 · 0 评论 -
构造,析构,拷贝,赋值
已知String类定义如下:写出类的成员函数class String{public: String(const char *str = NULL); // 通用构造函数 String(const String &another); // 拷贝构造函数 ~ String(); // 析构函数 String & operater =(const String &rhs); // 赋值函数private: char *m_data; };原创 2021-09-29 01:04:57 · 127 阅读 · 0 评论 -
.线程池.
生产者与消费者模型:生产者:生产数据的线程消费者:使用、处理数据的线程缓冲区:隔离生产者和消费者,这样可以避免互相等待,提高运行效率。生产者快于消费者:缓冲区爆满消费者快于生产者:缓冲区一直空使用条件变量可以解决生产者与消费之间的效率不匹配问题。生产者快于消费者,通知消费者加速消费,生产者睡眠降低生产速度。消费者快于生产者,通知生产者加速生产,消费者睡眠降低消费速度。线程池总体流程线程池:一次性创建多个子线程,主线程(生产者)负责接收客户端的链接并创建socket对象然后加入到仓库中,原创 2021-06-26 22:12:22 · 95 阅读 · 0 评论 -
.多路复用.
多路复用:使用一个进程(且只有主线程)同监控若干个文件描述符的读写,这种读写模式叫多路复用。多用于TCP的服务端,用于监控客户端的连接和数据的收发优点:不需要频繁的创建进程、销毁进程,从而节约了内存资源、时间资源,也避免的进程之间的竞争、等待。缺点:单个客户端的任务不能太耗时,否则其它客户端就会感知到。适合并发量高,但任务短小的情景,如:Web服务器。select:fd_set 是文件描述符的集合,使用以下函数操作: void FD_ZERO(fd_set *set); 功能:原创 2021-06-26 22:04:07 · 92 阅读 · 0 评论 -
TCP/IP编程模型
一、基于TCP协议的C/S模型int listen(int sockfd, int backlog);功能:设置等待连接的最大数量sockfd:被监听的socket描述符backlog:等待连接的最大数量(排队的数量)int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);功能:等待连接sockfd连接addr:获取连接的地址addrlen:设置连接地址结构体的长度返回值:专门用于通信的描述符编程模型:Serv原创 2021-06-26 21:58:58 · 91 阅读 · 0 评论 -
网络编程基础socket
网络通信的基本概念1、TCP和UDP的区别TCP(Transmission Control Protocol):传输控制协议,面向连接的服务(类似打电话),安全、可靠(三次握手、响应+重传、四次挥手,拥塞控制),速度相对较慢,一般应用在对安全性、完整性有严格要求的场景:如文件传输(ftp)、SMTP、HTTP三次握手:A要知道,A能到B,B能到AB要也要知道,A能到B,B能到AA 你听得到吗 -> B(此时B知道了A能到B)(A能到B且B能到A)A <- 我能听到,原创 2021-06-26 21:56:10 · 98 阅读 · 0 评论 -
Linux线程同步
线程同步:当多个线程同时访问一个资源时,如果不进行协调可能会产生数据混乱、操作失效等现在,我们需要使用一些特殊的技术保障线程之间协同工作,这些技术叫线程同步技术。互斥量: pthread_mutex_t 也叫互斥锁 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr); 功能:初始化互斥量 int pthread_mutex_lock(pthre原创 2021-06-26 21:47:18 · 52 阅读 · 0 评论 -
Linux线程管理
线程介绍: 线程就是进程中负责执行的部分,是进程内部的控制序列,它是轻量级的,没有自己独立的内存资源、代码段(txt)、 数据段(静态数据bss、全局数据段data)、堆区(heap)、环境变量、命令行参数、文件描述符、信号处理函数、当前工作目录。 线程拥有独立的栈内存,也就是它自己独立的局部变量。 一个进程中至少有一个线程,我们把它叫作主线程,也可以再创建多个线程。 注意:进程是个资源单位,而线程是个执行单例,线程是进程的一部分,进程中正是有了线程才能动起来。原创 2021-06-26 21:43:32 · 212 阅读 · 0 评论 -
Linux进程通信
进程间通信:基本概念:什么是进程间通信:是指两个或者多个进程之间交互数据的过程,因为进程之间是相互独立的,为了能够让多个进程协同工作必须交互数据进程间通信的分类:简单的进程间通信:信号、文件、环境变量、命令行参数传统的进程间通信:管道文件XSI进程间通信: 共享内存、消息队列、信号量网络进程间通信: Socket套接字传统进程间通信:管道是UNIX最古老的进程间通信方式,古老意味着所有系统都支持,早期的管道都是半双工,现在有些系统的管道是全双工(但是也要假定管道是半双工来实现)管道原创 2021-06-26 21:31:38 · 112 阅读 · 1 评论 -
Linux进程管理
进程基本概念:1、进程与程序程序就是存储在磁盘上的可执行文件,程序被加载到内存中开始运行进程。一个程序被多次加载时生成多个进程进程就是处于活动状态的计算机程序2、进程的分类 进程一般分为三种类型:交互进程、批处理进程、守护进程 守护进程一般处于活跃状态,运行在后台,由系统在开机时通过启动脚本来自动创建3、查看进程 简单方式 ps 显示当前用户有控制终端的进程信息 列表方式 ps auxw 显示所有进程详细信息 a 所有用户的有控制终端的原创 2021-06-25 01:47:50 · 67 阅读 · 0 评论 -
Linux信号处理
信号处理基本概念:1、中断当程序接收信息后中止当前执行的程序,转而执行其它任务,等其它任务执行完成后再返回,这种执行模式叫中断,分为硬件中断和软件中断。2、信号是一种软件中断,由操作系统发出,程序接收到后会执行相应的操作3、常见的信号SIGINT(2) Ctrl+c 终止SIGQUIT(3) Ctrl+\ 终止+coreSIGFPE(8) 除0 终止+coreSIGKILL(9) 终止原创 2021-06-25 01:46:53 · 144 阅读 · 0 评论 -
Linux内存管理
一、内存管理用户层STL 自动分配/自动释放 调用C++C++ new/delete 调用CC malloc/free 调用POSIXPOSIX brk/sbrk 调用LinuxLinux mmap/munmap 调用内核kernal系统层kernal kmalloc/vmalloc 调用驱动driver get_free_page二、进程映像程序是存储在磁盘上的可执行文件原创 2021-06-25 01:45:33 · 77 阅读 · 0 评论 -
Linux文件管理
文件管理:一切皆文件:UNIX/Linux操作系统把设备和服务都抽象成了文件形式,并提供了一套简单而统一的接口,这部分接口就是文件IO(文件读写)也就是说UNIX/Linux系统中任何对象都可以当做某种特殊的文件,以文件的形式访问文件的分类: 普通文件 - 包括纯文本文件、二进制文件、压缩文件 目录文件 d 块设备文件 b 保存大块数据的设备,例如硬盘 字符设备文件 c 类似键盘、鼠标等 管道文件原创 2021-06-25 01:44:37 · 124 阅读 · 0 评论 -
Linux系统介绍
UNIX系统介绍:最早版本的UNIX诞生于1970年的贝尔实验室,作者丹尼斯.里奇和肯.汤普逊是最早的多用户、多任务、支持多种CPU处理器架构,高安全性、高可靠性、高稳定性的系统既能架构大型关键性的商用服务器,也能支持嵌入式设备Minix基于微内核架构的类UNIX操作系统,由此Linux之父林纳斯.托瓦兹受到了启发,才开发了第一个版本的LinuxLinux系统介绍:Linux,全称GNU/Linux,其内核由林纳斯·托瓦兹于1991年发布,是一个基于POSIX(可移植操作系统接口)的多用户、多原创 2021-06-25 01:43:31 · 278 阅读 · 0 评论 -
C++基础知识六
一、虚析构当使用delete释放一个父类指针时(父类引用),不管指向的是父类对象还是子类对象,都只会调用父类的析构。当使用多态特性时,如果子类中有需要析构释放的资源,为了避免内存泄漏就需要把父类的析构函数设置为虚函数。当父类的析构函数为虚函数时,子类的析构会自动覆盖它而不用比较它们的名字,当通过父类或引用来释放子类对象时会自动调用子类的析构函数。二、文件流C++把对文件的操作封装到了类中。ifstream 输入文件流ofstream 输出文件流fstream 输入/输出文件流1、打开文原创 2021-06-25 01:11:05 · 160 阅读 · 0 评论 -
C++基础知识五
一、类的继承1、在解决问题时,先查看当前现在的类能否解决部分问题,如果可以则把旧的继承后再拓展来缩短解决问题的时间,降低解决问题的难度,继承就是为了让代码能够重复使用。2、当面临一个复杂问题时,可以先把问题进行分层,每层的类解决一部分问题,然后通过继承进行汇总,最终得到一个解决问题的类。二、继承的基本语法1、继承表一个子类可以继承多个父类,每个类的继承方式可以不同。class 子类:继承方式 父类1,继承方式 父类2,… //继承表{}2、继承方式 public 公原创 2021-06-25 01:09:46 · 45 阅读 · 0 评论 -
C++基础知识四
一、运算符重载C++中是运算符当作函数来看待,所以C++中的运算符可以重载,这样可以让类对象支持运算符,对类对象进行定制化操作。例如:string类就支持很多运算符来代替标准库中的函数。= strcpy+= strlen==|!=|>=|<= strcmp二、双目录运算符重载假如:Test a,b; a+b操作可以调用两种函数Test的成员函数:a是触发者,b是参数Test operator+(cosnt Test& b) const{return a+b; //原创 2021-06-24 19:05:48 · 93 阅读 · 0 评论 -
C++基础知识三
一、类的成员变量存储在每个类对象中(每个对象一份),成员函数存储在代码段中(所有的对象共享一份),那么成员函数是如何区分调用它的是哪个对象?答:与C语言的解决方案一样,把对象的地址传递给成员函数,这样成员函数就知道是哪个对象在调用它,与C语言不同的是该操作是隐藏,编译器帮我们自动完成的,也就是类的成员函数都隐藏着一个参数,这个参数就是this指针。this指针:指向访问成员函数对象的指针,默认是隐藏的,但也可以显示使用。对象调用成员函数时会自动计算它的内存地址传递给成员函数中的this,而在成员函原创 2021-06-24 19:04:13 · 65 阅读 · 0 评论 -
C++基础知识二
一、面向对象与面向过程:面向过程:关注解决问题的步骤,算法。面向对象:关注的是谁能解决问题,需要什么样的数据(成员变量),具备什么样的功能(成员函数)。抽象:找出或相像出一个能够解决问题的"对象",通过研究观察对象,找出c"对象"解决问题所必须的数据(属性)、功能(技能)。封装:把抽象的结果归纳为一个结构,然后实例化出结构变量,然后结构变量中的数据和功能相互作用最终解决问题。继承:在封装结构时,可以先分析结构需要的数据和功能现有的结构是具备,如果具备,可以继承现有的结构的代码,达到代码复用的目的。原创 2021-06-24 19:02:44 · 163 阅读 · 1 评论 -
C++基础知识一
一、C++介绍由本贾尼·斯特劳斯特卢普 于1979年4月份至1979年10月份开发一种语言,当时称为“C with Classes”(带类的C),后来演化为C++。C与C++区别:1、C++完全兼容C语言的所有内容。2、支持面向对象的编程思想(抽象、封装、继承、多态)。3、支持运算符、函数重载。4、支持泛型编程、模板。5、支持异常处理。6、类型检查严格。二、第一个C++程序1、文件扩展名:.cpp .cc .C .cxx2、编译器:g++ 大多数的Linux系统需要额外安装。sud原创 2021-06-24 19:01:24 · 167 阅读 · 1 评论 -
浅谈指针与引用
一. 指针1.什么是指针:指针是一种特殊的数据类型,使用它可以定义指针变量,指针变量中存储的是整型数据,代表了内存的编号,通过这个编号访问到对应的内存。2.为什么使用指针:a、函数与函数之间是相互独立的,但是有些时候需要共享变量传参是单向值传递全局变量容易命名冲突使用数组还需要传递长度函数的命名空间是相互独立的,但是地址空间是同一个,所以指针可以解决这个问题b、由于函数传参是值传递(内存拷贝),对于字节数较多的变量,值传递的效率较低,如果传递的是变量的地址,只需要传递4|8字节。c、堆内原创 2021-04-13 09:36:31 · 761 阅读 · 0 评论