- 博客(30)
- 收藏
- 关注
原创 Qt多线程
QApplication::processEvents(..,30)表示让CPU先去处理其他时间,设置最大处理时间为30ms,30ms后该函数返回。QFutureWatcher是一个模板类,<>中填上耗时任务的返回值类型,当耗时任务完成时,FutureWatcher会发出finished信号。给FutrueWatcher设置Future。需要用到QFutureWatcher。要添加Concurrent模块。run函数后面跟上参数。
2025-08-10 16:14:04
277
原创 C++字符串分割
以stringstream作为输入流传入getline,指定分隔符。注意头文件:#include<stringstream>利用stringstream。
2024-11-11 19:58:12
1022
原创 C++文件操作
len是读写的字节数。C++中对文件操作需要包含头文件 ==< fstream >==读文件可以利用 ofstream ,或者fstream类。读文件可以利用 ifstream ,或者fstream类。文件输入流对象 可以通过read函数,以二进制方式读数据。二进制方式写文件主要利用流对象调用成员函数write。二进制方式读文件主要利用流对象调用成员函数read。打开文件时候需要指定操作文件的路径,以及打开方式。读文件与写文件步骤相似,但是读取方式相对于比较多。文件打开方式可以配合使用,利用|操作符。
2024-10-21 20:35:37
999
原创 (自用)TCP分包和粘包
相关的,路由器有一个MTU( 最大传输单元)一般是1500字节,除去IP头部20字节,留给TCP的就只有MTU-20字节。TCP是以段(Segment)为单位发送数据的,建立TCP链接后,有一个最大消息长度(MSS).如果应用层数据包超过MSS,就会把应用层数据包拆分,分成两个段来发送.发送方发送字符串”helloworld”,接收方却分别接收到了两个数据包:字符串”hello”和”world”b)接收端:先解析本次数据包的大小N,再读取N个字节,这N个字节就是一个完整的数据内容。
2024-08-12 02:03:01
1827
原创 (自用)交互协议设计——protobuf序列化
protobuf是一种比json和xml等序列化工具更加轻量和高效的,性能比json和xml真的强很多,毕竟google出品。
2024-08-11 18:39:08
591
原创 (自用)网络编程
基于UDP的网络套接字通信服务器端(1) 创建一个网络套接字(2) 设置服务器地址(3) 绑定该套接字,使得该套接字和对应的端口关联起来(4) 循环处理客户端请求使用recvfrom等待接收客户端发送的数据使用sendto发送数据至客户端客户端(1) 创建一个套接字(2) 设置服务器地址(3) 使用sendto向服务器端(接收端)发送数据(4) 使用recv接受数据。
2024-07-14 21:47:19
733
原创 高并发线程池设计&Nginx线程池源码剖析
省流:为了解决:1.访问磁盘速度慢2.等待设备工作3.....我们使用多线程技术,在IO繁忙的时候优先处理别的任务为了解决多线程的缺陷:1.创建、销毁线程时间消耗大2.创建线程太多使系统资源不足或者线程频繁切换耗时太多我们采用了线程池技术。
2024-07-13 14:53:21
1005
原创 (自用)多线程编程
此时所指的“信号量”是指用于同一个进程内多个线程之间的信号量。即POSIX信号量,而不是System V信号量(用于进程之间的同步)POSIX信号量——线程间实现同步System V信号量——进程间实现同步用于线程的信号量的原理,与用于进程之间的信号量的原理相同。都有P操作、V操作。信号量的表示:sem_t 类型效果上等同于初值为1的信号量互斥量的使用:类型为 pthread_mutex_t。
2024-07-13 00:25:05
738
原创 (自用)进程间通信
信号量,是一种特殊的变量。只能对信号量执行P操作和V操作P操作, 如果信号量的值 > 0, 则把该信号量减1如果信号量的值 ==0, 则挂起该进程。V操作: 如果有进程因该信号量而被挂起,则恢复该进程运行如果没有进程因该信号量而挂起,则把该信号量加1注意:P操作、V操作都是原子操作,即其在执行时,不会被中断。注意:此指的“信号量”是指System V IPC的信号量,与线程所使用的信号量不同。该信号量,用于进程间通信。
2024-07-11 15:25:21
853
原创 (自用)多进程与信号
程序和进程程序≠进程产生进程创建进程——fork函数函数原型函数功能:fork函数的功能是创建一个与当前进程几乎完全相同的子进程。这个“几乎完全相同”指的是子进程会复制父进程的代码段、数据段、BSS段、堆、栈等所有用户空间信息,但它们在内核中的进程控制块(PCB)是不同的,因此拥有不同的进程ID。返回值代码示例:分析:最后父子进程都输出count的值子进程输出2 父进程输出1因为子进程、父进程的count不是同一份,子进程复制了父进程的count。
2024-07-10 15:21:55
767
原创 (自用)共享单车服务器(二) 项目日志
在通常情况下,Linux/UNIX每个程序在开始运行的时刻,都会打开3个已经打开的stream. 分别用来输入,输出,打印诊断和错误信息。例如,%d{%H:%M:%S,%l} 或 %d{%d %m %Y %H:%M:%S,%l}。上文,我们说过日志输出到终端或者文件中实际上是很慢的,会引起IO中断,所以我们可以输出到内存里StringQueueAppender,然后从StringQueueAppender输出到其它地方,这样我们的线程执行是比较高效的。日志级别的意思是低于该级别的日志不会被记录。
2024-07-09 01:53:42
1189
原创 (自用)共享单车服务器(一):服务器项目配置
6.将库文件(libiniparser.a、libiniparser.so.4、libiniparser.so.4.2.4)放入 third/lib/iniparser 文件夹。7将iniparser/src目录下的头文件(dictionary.h、iniparser.h)放入 third/include/iniparser中。在thrid/lib文件夹中创建iniparser文件夹,用来存放iniparser对应的库文件。iniconfig:对于iniparser的一些解析配置文件的函数进行封装。
2024-07-08 13:54:09
802
原创 (自用)gtest单元测试
gtest是Google的一套用于编写C++测试的框架,可以运行在很多平台上(包括Linux、Mac OS X、Windows、Cygwin等等)。基于xUnit架构。支持很多好用的特性,包括自动识别测试、丰富的断言、断言自定义、死亡测试、非终止的失败、生成XML报告等等。
2024-07-06 23:59:02
777
1
原创 (自用)gdb调试、coredump调试和valgrind内存检测
比如:函数地址,调用函数的地址,被调用函数的地址,目前的函数是由什么样的程序语言写成的、函数参数地址及值、局部变量的地址等等。每次程序调用一个函数,函数的地址、参数、函数内部变量都会被压入“栈”(Stack) 中,运行时堆栈信息对于程序员非常重要,使用 “bt”命令可以看到当前运行时栈的情况。如果你要查看某一层的信息,你需要切换当前的栈,一般来说,程序停止时,最顶层的栈就是当前栈,如果你要查看栈下面层的详细信息,首先要做的是切换当前栈。比如:frame 0,表示栈顶,frame 1,表示栈的第二层。
2024-07-06 19:56:42
1355
原创 (自用)g++编译
但是在一个大型的项目中,存在大量的文件,靠这种方式编译效率会非常低下,甚至出错,于是我们可以把一些有关联的模块打包成一个文件来使用,即库文件。-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。2.未经预处理过的.cpp文件转化为汇编.s文件 .cpp------->.s。1.预处理过的.i文件转化为汇编.s文件 .i --------> .s。1.先都生成.o文件,再链接为可执行文件。
2024-07-06 15:21:15
709
原创 (自用)Makefile编写
3、如果hello_demo文件不存在,或是hello_demo所依赖的后面的 .o 文件的文件修改时间要比hello_demo这个文件新,那么,他就会执行后面所定义的命令来生成hello_demo这个文件。5、当然,我们的C文件和H文件都存在,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件hello_demo了。2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“hello_demo”这个文件,并把这个文件作为最终的目标文件。
2024-07-05 10:08:01
418
原创 (自用)实现高并发http服务器
HTML文本是由 HTML命令组成的描述性文本,HTML 命令可以说明文字、 图形、动画、声音、表格、链接等。即平常上网所看到的的网页。服务端从accept函数返回之后,执行pthread_create函数来创建线程执行do_http_request函数。在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。参数3:函数指针,指向线程主函数(线程体),该函数运行结束,则线程结束。参数1:传出参数,保存系统为我们分配好的线程ID。参数4:线程主函数执行期间所使用的参数。
2024-07-03 18:38:40
1071
原创 (自用)Socket编程
TCP\IP协议是默认规定发收双方是大端主机,所以发收双方需要htonx函数进行字节转换(使得小端主机自己转换,大端主机不变)PS:1.in_addr中存储的ip地址是32位整型的,使用时可能要转换为字符串形式eg:回音服务器echo_server.c中其中AF_INET表示使用IPV4协议,INADDR_ANY为0.0.0.0表示本机贴标签(调用bind函数)的时候需要强制将sockaddr_in强转为sockaddr产生的是一个客户端socket。
2024-06-28 16:34:49
1224
原创 基于Linux的海量文件存储引擎
这个宏的作用主要是为了解决不同平台(特别是32位和64位系统)下整数类型表示和格式化输出的问题。32位机输出64位int,printf中应为%lld64位机输出64位int,printf中应为%ld32位、64位机可以统一使用__PRI64_PREFIX来输出64位int因为很多模块都要用到索引文件,所以在common.h中定义1.块信息BlockInfo//块编号//块当前版本号//当前已保存文件总数//当前已保存文件数据总大小//已删除的文件数量//已删除的文件数据总大小。
2024-06-25 21:14:14
737
原创 APUE学习:第十章信号
信号以SIG开头eg:SIGABRT——夭折信号,进程调用abort时产生这种信号SIGLARM——闹钟信号,alarm设置的定时器超时后产生信号在头文件 signal.h中定义。
2024-04-11 00:31:08
759
1
原创 APUE学习:第九章 进程关系
在同一个会话内,不同进程组的父进程可以通过会话ID找到这些进程组,从而有机会重新启动这些停止的进程。如果不在同一个会话内,父进程就无法直接访问其他会话中的进程组,也就无法重新启动这些进程。1.bash和ps位于不同的进程组,这里ps命令在前台运行,ps命令是前台进程组(5796)的组长进程/子进程继承了父进程的进程组ID,子进程的ID是新分配的,两者不可能相等,保证了setsid函数不出错。管道中的最后一个进程(cat2)为shell的子进程,其他命令的进程为最后进程(cat2)的子进程。
2024-03-28 10:23:36
619
原创 APUE学习:第八章进程控制
incr参数将增加到调用进程的nice值上,系统会控制nice值为合法的(普通进程只允许增加nice值,只有特权用户允许减少nice值),nice值范围为-20到19。这就是写时复制,当子进程对缓冲区(堆区中的一部分)进行冲洗时,相当于对堆区进行了修改,则内核在子进程进行冲洗前会生成一个缓冲区的副本。上图代码中是子进程先执行,子进程和父进程的缓冲区是共享的,为什么子进程对缓冲区进行冲洗以后,父进程还能输出before fork?包括进程执行自己代码的时间,但不包括系统调用或其他内核操作所耗费的时间。
2024-03-27 14:26:49
732
原创 APUE学习:第七章 进程环境
相当于一个存放函数的栈(先入后出),栈中存放的函数不能带参数且最大容量为32,调用atexit函数 可以把一个不带参数的函数放入栈,那么什么时候出栈呢?databuf数组是一个自动变量,它开辟在函数open_data的栈帧中的一块区域,fp流指针指向该区域,但是函数返回之后,open_data的栈帧就被系统收回了。对于普通的自动变量,很明显是清除的(自动变量保存在栈帧中,你栈帧都没了,自动变量不可能保存的)全局变量、静态变量和易失变量不受优化的影响,在longjmp之后,它们的值为最近所呈现的值。
2024-03-24 22:36:13
1168
原创 APUE学习:第五章标准I/O库
注意:1.fwide不改变已定向流的定向 (重复调用fwide 第二次调用无效??2.fwide无出错返回,需要根据errno来判断是否出错,所以调用fwide前应该先清除errno。
2024-03-24 15:03:54
213
原创 学习APUE:第四章文件和目录
2.buf.st_mode文件模式字,其中有文件的类型信息。函数提供了一个灵活的方式来获取文件的状态信息,特别是当需要处理符号链接或相对于特定目录的路径时。3.要删除一个现有文件,需要对文件所在目录有写、执行权限,要对文件本身不需要有读、写权限。或者 “当执行此文件时,将进程的有效组ID设置为文件所有者的组ID”——S_ISGID。使得“当执行此文件时,将进程的有效ID设置为文件所有者的用户ID”——S_ISUID。lstat 针对于符号链接文件,返回符号链接有关信息,而不返回链接引用的文件信息。
2024-03-22 16:47:54
533
1
原创 学习AUPE:第三章文件IO
关于main函数的传参问题argc表示参数入的参数个数 agrv表示参数列表例如../printfl.out a b c则argv[0] 为./printfl.outargv[1]为a等等fcntl函数cmd为GETFL时可以获取文件状态标志第一个参数为文件描述符,第二个参数为cmd 此时为GETFL 第三个参数为返回的文件状态标志值(可以直接赋值为0,因为返回值也是文件状态标志值)注意 读写权限(O_RDWD、O_RDONLY等)的判断 要先将获取的val与O_ACCMODE相&修改文件状态
2024-03-22 15:21:12
968
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅