自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 C++ 网络编程学习七

【代码】C++ 网络编程学习七。

2024-03-19 10:21:12 877

原创 C++ 网络编程学习五

饿汉式是在程序启动时就进行单例的初始化,这种方式也可以通过懒汉式调用,无论饿汉式还是懒汉式都存在一个问题,就是什么时候释放内存?多线程情况下,释放内存就很难了,还有二次释放内存的风险。, 单线程仅有一个io_context服务用来监听读写事件,就绪后回调函数在一个线程里串行调用。单例模式的单例由指针存在,创建单例的时候,用加锁的方式进行判断。防止在加锁的过程中,出现单例类被创建的情况。消息id占2个字节,消息长度占2个字节,消息头共4个字节。消息 = 消息id + 消息长度 + 消息内容。

2024-03-14 18:21:00 1160

原创 C++ 网络编程学习四

在服务器的发送数据时会构造消息节点,构造消息节点时,将发送长度由本地字节序转化为网络字节序.network_to_host_short从网络字节序转成本地字节序。我们先创建一个msg.proto,该文件用来定义我们要发送的类信息。在 boost::asio 库中,可以使用。函数将主机字节序转换为网络字节序。

2024-03-13 18:18:41 1239 1

原创 C++ 网络编程学习三

问题:智能指针传给函数对象,函数对象不释放,智能指针也就不会被释放掉。把智能指针传递给session用的回调函数,函数内部再使用智能指针,这个时候智能指针就不被释放。假如包含智能指针的函数没有调用怎么办?用lambda表达式和bind强制将智能指针中的shared_ptr加1。构造一个伪闭包:处理粘包问题粘包问题:客户端发送: hello world! hello world!服务器接收:hello world! hello world!客户端给服务器发送了两个hello world

2024-02-29 21:13:39 1065 1

原创 C++ 网络编程学习二

【代码】C++ 网络编程学习二。

2024-02-26 21:03:02 1288 1

原创 C++ 网络编程学习一

监听的套接字用于建立连接,通信的套接字用于数据交互。用于数据交互的read和write都是阻塞函数,在单线程下面,一个服务器想和多客户端进行通信,肯定是做不到的,因为accept,read,write都是阻塞的。如果有客户端进行连接,服务器端就可以和发起连接的客户端建立连接,连接建立成功会生成一个用于通信的套接字。单线程流程中,服务器创建用于监听的套接字,绑定本地的ip和端口,listen函数去监听绑定的端口。

2024-02-19 16:44:53 1083 1

原创 C++ JSON解析

【代码】C++ JSON解析。

2024-02-06 10:49:59 1000

原创 C++ LRU

如果考虑线程安全性,就需要用到锁,C++中的mutex,配合std::lock_guard使用。总是希望最近使用的、最频繁使用的数据存储在比较靠前的位置。

2024-01-31 17:52:41 506

原创 C++数据库连接池

对于数据库操作都是在访问数据库的时候创建连接,访问完毕断开连接。

2024-01-31 14:05:36 1649

原创 C++实现string类

默认构造函数中,为ptr申请一个字节的堆内存,这样任何情况下,ptr都不为nullptr,避免了ptr是否为nullptr的情况,在随时访问的时候,就可以少写很多if判断。

2024-01-25 16:19:22 457

原创 Effective C++ 学习

进行混合类型算术运算的时候,会出现编译通过不了的情况//错误,无法通过编译解决方法:使用friend声明一个函数,进行混合式调用这里的friend和非friend函数是没有关联的。类外部的函数,并非为声明函数的实现。public:当我们编写一个class template, 而他所提供的“与此template相关的”函数支持所有参数隐形类型转换时,请将那些函数定义为classtemplate内部的friend函数。

2024-01-24 10:18:01 883

原创 红黑树浅浅学习

【代码】红黑树浅浅学习。

2024-01-23 20:49:38 468

原创 CMAKE学习

嵌套的 CMake 也是一个树状结构,最顶层的 CMakeLists.txt 是根节点,其次都是子节点。

2024-01-16 13:42:24 1081 1

原创 C++11学习

auto 类型推导范围 for 迭代初始化列表变参模板lambda表达式函数对象包装器右值引用移动语义完美转发智能指针RAII多线程相关参考列表。

2024-01-11 17:50:42 843 1

原创 C/C++ 线程池二

原子指的是一系列不可被CPU上下文交换的机器指令,这些指令组合在一起就形成了原子操作,在多核CPU下,当某个CPU核心开始运行原子操作时,会暂停其他CPU内核对内存的操作,以保证原子操作不会被其他CPU内核干扰。如果将所有的任务都以串行的方式执行,则整个系统的效率将会非常低下,应用程序的用户体验会非常的差。async是C++11引入的函数模板,用于异步执行一个函数,并返回std::future对象,表示异步操作的结果,使用std::async可以方便地进行异步变成,避免了,手动创建线程和管理线程的麻烦。

2024-01-08 15:46:44 1080

原创 C/C++ 线程池一

线程池就是希望先一个线程执行完一个任务,不被销毁,去执行其他任务。线程池的任务处理过程中,将任务添加到队列,在创建线程后自动执行这些任务。

2024-01-03 17:25:34 447 1

原创 Linux学习八(线程同步)

try_lock_for(const std::chrono::duration<Rep, Period>& rel_time):尝试对互斥量进行加锁操作,如果当前互斥量已经被其他线程持有,则当前线程会被阻塞,直到互斥量被成功加锁,或者超过了指定的时间。等待阻塞,阻塞的过程中需要一个互斥锁参数,互斥锁让线程进入临界区,避免数据混乱。

2023-12-28 14:55:21 894 1

原创 Linux学习七(线程)

线程是轻量级的进程:在操作系统中,将一个进程划分为多个执行单元,每个单元拥有自己的堆栈、程序计数器和资源使用情况,但共享同一进程的地址空间和文件描述符等资源,这些执行单元就是线程。进程是资源分配的最小单位,线程是系统调度的最小单位。线程的创建、切换和销毁都更加高效,占用的系统资源少。线程提供了一种并发执行的机制,使得多个任务可以在同一个进程中并行执行。不同线程之间可以通过共享内存等机制进行通信和同步,数据共享更加便捷,且避免了进程切换的开销。

2023-12-22 17:15:18 917

原创 Linux学习六(进程间通信)

POSIX消息队列是一种基于文件的消息队列,system v进程间通信实现方式不能和文件兼容,Linux一切皆文件,所以选择posix进程间通信方式会更好些。semctl:对一个已经存在的信号量集值进行各种操作,比如获取信号量集值的信息,设置信号量集的值,删除信号量等。Linux内核中实现信号的关键是信号处理函数和信号传递,每个进程都有一个信号来表示该进程对不同信号的处理情况。,打开这个磁盘上的管道文件就可以得到操作有名管道的文件描述符,通过文件描述符读写管道存储在内核中的数据。

2023-12-21 18:24:56 931

原创 Linux学习五(进程)

Linux中,文件系统通常使用缓存区来提高文件读写性能,当程序对文件进行读写操作时,数据首先会被写入到内核的缓冲区中,而不是直接写入磁盘,这样可以减少磁盘IO的次数,提高文件读写的效率。在子进程退出的时候, 进程中的用户区可以自己释放, 但是进程内核区的pcb资源自己无法释放,必须要由父进程来释放子进程的pcb资源,孤儿进程被领养之后,操作系统释放资源,这样可以避免系统资源的浪费。:已经终止执行的进程,父进程没有它的回收资源,用户区资源已经被释放了,只是还占用着一些内核资源(PCB)。

2023-12-19 15:00:56 948 1

原创 STL泛型编程学习一

iterator_category:迭代器的分类,指它的移动性质,表示迭代器的类型(如输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器等)。这个信息可以方便算法采用最佳的移动方式。:移动构造在进行复制构造的时候,只需要把指针指向原数据,然后把原数据的指针置空,再设置数据大小。difference_type:迭代器之间的距离类型,通常使用ptrdiff_t。value_type:迭代器指向的值类型。告诉算法是int 还是 string?pointer:指向value_type的指针类型。

2023-12-18 18:16:08 923

原创 Linux学习四(GDB)

linespec指定了断点设置在的源程序的行号。threadno指定了线程的ID,ID是GDB分配的,可以通过“info threads”命令来查看正在运行程序中的线程信息。GDB启动时,可以加一些GDB的启动开关,一般比较常用的就是符号表 -s -c coredump的core文件,-d 添加一个源文件的路径。info frame/f 打印栈的层编号,当前的函数名,函数参数值,函数所在文件及行号,函数执行到的语句。如果程序是多线程的话,可以定义断点是否在所有的线程上,或是在某个特定的线程。

2023-12-14 10:40:50 137 1

原创 Linux学习三(Makefile)

需要先将依赖生成出来,就可以在makefile中添加新的规则,将不存在的依赖作为这个新的规则中的目标,当这条新的规则对应的命令执行完毕,对应的目标就被生成了,同时另一条规则中需要的依赖也就存在了。这样,makefile中的某一条规则在需要的时候,就会被其他的规则调用,直到makefile中的第一条规则中的所有的依赖全部被生成,第一条规则中的命令就可以基于这些依赖生成对应的目标,make 的任务也就完成了。自定义变量:用 Makefile 进行规则定义的时候,用户可以定义自己的变量,称为用户自定义变量。

2023-12-12 14:54:48 52

原创 Linux 学习二(GCC/静态库动态库)

当我们拿到了库文件(动态库、静态库)之后要想使用还必须有这些库中提供的API函数的声明,也就是头文件,把这些都添加到项目中。创建静态库的过程:Linux下使用ar工具、Windows下vs使用lib.exe,将目标文件压缩到一起,并且对其进行编号和索引,以便于查找和检索。静态库必定跟.o文件格式相似。其实一个静态库可以简单看成是一组目标文件(.o/.obj文件)的集合,即很多目标文件经过压缩打包后形成的一个文件。与创建静态库不同的是,不需要打包工具(ar、lib.exe),直接使用编译器即可创建动态库。

2023-12-11 16:00:31 95 1

原创 Linux学习一(基础知识与命令)

在Linux中,内存管理主要说的是虚拟内存。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。userdle命令才能删除用户在系统中的用户ID和所属组ID等相关信息,但是需要注意的是在某些Linux版本中用户虽然被删除了, 但是它的家目录却没有被删除,需要我们手动将其删除。chmod:修改文件权限,用的也挺多的,.sh文件刚建立的时候不能直接运行,需要添加chmod +x run.sh,加上执行权限。

2023-12-08 17:13:58 58

原创 C++ Primer学习二

a. 浅拷贝:简单的赋值拷贝操作。ii. 在编译阶段分配内存,不和类对象在同一个存储空间上,只有非静态成员变量才属于类的对象上。d. 赋值运算符重载:进行赋值,注意深浅拷贝。b. 左移运算符重载:定义输出方式,一定要定义成友元函数,没法用隐式转换。对于类模板中的静态数据,每个类型共享一个,而不是所有的共享一个。rule of three:定义了其中一个,剩下的几个都要定义。f. 函数调用重载:仿函数,定义类似函数的行为,比较自由。b. 深拷贝:在堆区重新申请空间,进行拷贝操作。普通类中包含模板函数 …

2023-12-08 15:54:01 913

原创 C++ Primer学习一

学习C++ Primer。

2023-12-06 15:07:35 51 1

原创 C/C++ WebServer服务器一

也就是select,poll,epoll,可以通过一次系统调用,检查多个文件描述符的状态,相比于非阻塞 I/O,在文件描述符较多的场景下,避免了频繁的用户态和内核态的切换,减少了系统调用的开销。用于数据交互的read和write都是阻塞函数,在单线程下面,一个服务器想和多客户端进行通信,肯定是做不到的,因为accept,read,write都是阻塞的。但是这种做法缺点是,单线程的服务器模型中,主程序会不断阻塞的进行连接和数据通信两项工作,两项工作和主线程不独立,当连接请求比较多的时候,效率相对较低。

2023-12-05 14:38:21 1293 1

原创 深入浅出WPF 学习笔记三

MultiSetter的写法。

2023-09-12 14:17:36 38

原创 深入浅出WPF 学习笔记二

深入浅出WPF 学习笔记二深入浅出WPFBinding使用集合对象作为列表控件的ItemsSourceConverter深入浅出WPFBinding其他的先不管,先把通知UI的工作做好,这个地方,吃了很多亏,踩了很多坑,总以为不写通知不会有什么问题,但是不写通知就是不行!class Student : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged;

2023-09-08 20:51:52 111

原创 深入浅出WPF 学习笔记一

作为一个C++开发程序员,我其实是不太喜欢C#和界面相关的东西的,不过后来想清楚了,任何语言都是为了解决问题,现在工作中,遇到的问题必须要通过C#和WPF来解决,既然逃不过,那不如深度学习,况且程序员就是要有终身学习的态度。享受C#,享受WPF,嗯。WPF基本类库包含了VisualTreeHelper和LogicalTreeHelper两个助手类,方便寻找当前节点的父子节点等操作。Attribute主要对应标签特征,Property主要对应类属性。书里面提供的线性渐变的图,还可以。

2023-09-08 16:58:20 91

原创 YOLOv5Face YOLO5Face人脸检测论文及代码简析

YOLO5face人脸检测模型论文和代码简析YOLO5Face模型分析论文及源码下载论文创新点实验下载代码跑起来还没想好写什么,但是一定会写参考文章YOLO5Face论文发出以后,对YOLO5Face论文进行分析的文章较少,就想写一篇对YOLO5Face进行分析的文章,主要也是非常喜欢YOLO系列,博主也是刚刚入门人脸检测,写的就是一篇小白文,也第一次写文章,有不正确的地方希望大神们多多指正。andYOLO5Face模型分析论文及源码下载论文地址:https://arxiv.org/abs/210

2021-10-09 15:29:44 18420 56

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除