C++
文章平均质量分 87
CoreDump丶
一枚学生党
展开
-
vs使用protobuf的各种坑
最近准备做一个即时通讯系统的客户端与服务端,选用protobuf作为TCP之上网络传输的协议,服务端使用的是Go语言,Go语言的protobuf使用起来很舒服很愉悦。客户端使用的是vs + qt,但是在安装protobuf的过程中遇到了各种坑爹的东西,特此记录下来。下面讲解windows安装protobuf并在vs中使用它,以及各种坑。1、下载protobuf和cmakeprotobuf下载地址:https://github.com/protocolbuffers/protobuf/releases/t原创 2021-11-15 18:35:11 · 5452 阅读 · 9 评论 -
使用VSCode和CMake开发、调试Linux C++
在介绍VSCode环境搭建前,需要对GCC编译器和CMake有一个了解。1、GCC编译器Vscode是通过调用GCC编译器来编译C/C++程序的,因此需要对GCC有一个基本的了解。1.1 编译过程C/C++程序的编译可以分为四步:1)预处理 Pre-Processing# 预处理主要是头文件的展开以及宏定义的替换g++ -E test.cpp -o test.i 2)编译 Compiling# 编译是将经过预处理后的文件编译成汇编文件。g++ -S test.i -o te原创 2021-10-12 15:49:26 · 2375 阅读 · 3 评论 -
高性能定时器3——时间轮
在网络程序中我们通常要处理三种事件,网络I/O事件、信号以及定时事件,我们可以使用I/O复用系统调用(select、poll、epoll)将这三类事件进行统一处理。我们通常使用定时器来检测一个客户端的活动状态,服务器程序通常管理着众多定时事件,因此有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。为此我们需要将每个定时事件分别封装为定时器,并使用某种容器类数据结构,比如:链表、排序链表、最小堆、红黑树以及时间轮等,将所有定时器串联起来,以.原创 2021-10-09 17:24:16 · 1409 阅读 · 0 评论 -
C/C++内存检测工具valgrind--memcheck
Valgrind简介Valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,作者是获得过Google-O’Reilly开源大奖的Julian Seward,它包含一个内核 —— 一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等,内存检测,我们可以使用它的工具:Memcheck。Valgrind安装方法 1. valgrind官网:http://valgrind.org下载方法 2. Ubuntu: sudo apt-get install原创 2021-10-09 16:24:56 · 3177 阅读 · 0 评论 -
高性能定时器2——红黑树实现
在网络程序中我们通常要处理三种事件,网络I/O事件、信号以及定时事件,我们可以使用I/O复用系统调用(select、poll、epoll)将这三类事件进行统一处理。我们通常使用定时器来检测一个客户端的活动状态,服务器程序通常管理着众多定时事件,因此有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。为此我们需要将每个定时事件分别封装为定时器,并使用某种容器类数据结构,比如:链表、排序链表、最小堆、红黑树以及时间轮等,将所有定时器串联起来,以.原创 2021-10-08 20:26:28 · 900 阅读 · 0 评论 -
高性能定时器1——最小堆实现
高性能定时器1——时间堆 在网络程序中我们通常要处理三种事件,网络I/O事件、信号以及定时事件,我们可以使用I/O复用系统调用(select、poll、epoll)将这三类事件进行统一处理。我们通常使用定时器来检测一个客户端的活动状态,服务器程序通常管理着众多定时事件,因此有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。为此我们需要将每个定时事件分别封装为定时器,并使用某种容器类数据结构,比如:链表、排序链表、最小堆、红黑树以及时间轮等原创 2021-10-07 17:37:20 · 1276 阅读 · 0 评论 -
Linux信号
信号是由用户、系统或进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常,Linux中有很多种不同的信号。可以在终端输入kill -l 来查看Linux支持的信号,如下图:Linux信号可由如下条件产生:1、对于前台进程,用户可以通过输入特殊的终端字符来发送,比如输入Ctrl+C通常会给正在运行的进程发送一个中断信号。2、系统异常。比如浮点异常和非法内存段访问。3、系统状态变化。比如alarm定时器到期时将引起SIGALRM信号。4、在终端运行kill命令或在程原创 2021-10-05 15:29:43 · 1594 阅读 · 2 评论 -
IP地址转换函数
Linux IP地址转换函数通常,我们习惯可读性好的字符串来表示IP地址,比如使用点分十进制的字符串表示IPV4地址。但在编程中我们需要先把它转换为整型数据方能使用,而记录日志时则相反,下面介绍的函数可以将这两种形式的地址进行相互转换。#include <arpa/inet.h>// 将点分十进制字符串转换为十进制整数,失败时返回INADDR_NONEin_addr_t inet_addr(const char *strptr);// 同第一个函数功能一样,成功时返回1, 失败时返原创 2021-09-28 12:34:16 · 362 阅读 · 0 评论 -
VS Code自定义用户代码片段(C++)
vs code支持用户自定义代码片段,用起来很方便,下面来介绍一下如何使用用户代码片段1.用户代码片段简单介绍1.1 点击左下角设置1.2 在cpp.json中设置要定义的代码片段`// Example:"Print to console": {"prefix": "log", "body": [ "console.log('$1');", "$2" ], "description": "Log output to console" }`第一行字符串是一个提示信息原创 2020-11-30 14:05:29 · 3186 阅读 · 1 评论 -
Qt中mouseMoveEvent无效的问题
最近在Qt的学习中遇到了一个问题,就是重写了mouseMoveEvent,在其中打印鼠标移动的坐标信息却无效在Qt中要捕捉鼠标移动信息需要重写mouseMoveEvent,但是mouseMoveEvent为了不太消耗资源在默认情况下是需要按下鼠标移动才能捕捉到,想要在鼠标没有按下的情况下也能捕捉鼠标,需要对窗口设置setMouseTracking(true). 此属性保存是否为小部件启用了...原创 2020-04-13 13:59:52 · 2779 阅读 · 0 评论 -
linux学习笔记之 —— 共享库(动态库)
共享库(动态库)的制作:1.命名规则: lib + 名字 +.so 例如: libMytest.so2制作步骤: 1).生成与位置无关的代码 (生成与位置无关的.o) 2).将.o打包成共享库(动态库)具体步骤如下:假如目录下有两个源文件需要生成动态库:add.c sub.c 头文件head.h 在include目录中第一步:生成与位置无关的.o-fPIC 参数即为生...原创 2020-03-09 22:20:23 · 287 阅读 · 0 评论 -
用C++语言实现坦克大战游戏
用C++语言实现坦克大战游戏你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验...原创 2019-05-10 13:58:03 · 41314 阅读 · 36 评论