自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (4)
  • 收藏
  • 关注

原创 redis 总结

事务:用到的命令:multi exec discardreids事务是否支持acid:Atomicity:reids不具备原子性(一个事务的多个操作必须完成,或者都不完成)在reidis中事务分两个步骤完成 1、组队阶段 2、命令执行阶段在组队阶段 set k3 没设置value 所以报错 ,然后在执行exec也报错,组队阶段具备原子性下面例子在执行阶段报错,会导致只有错误的命令不会执行,没问题的命令依然会继续成功,所以redis不能保证原子性一致性 redis可以保证

2022-06-10 18:01:40 1264 2

原创 makefile 学习总结

上图代码结构:app player.c 主要是main函数的实现以及调用inc 头文件存放目录lcd lcd模块c文件lib 存放我们代码生成的libmath.so及libmedia.a 子目录ext_lib存放的是第三方库math math模块c文件usb usb模块c文件工程makefile介绍app/makefile定义如下:这里定义了我们最后生成的bin文件lcd/makefile这里BIN=空 代表我们只生成.o 具体生成的位置和规则往下..

2022-05-11 10:31:21 185

原创 网络专题七:windows高性能网络模型IOCP

/*总结iocp的几个步骤(注:完成键是在关联iocp的时候传入,重叠体是在投递任务的时候传入)1.创建空完成端口 createIoCompletionPort()2.关联完成端口和server套接字createIoCompletionPort()3.向完成端口投递接收连接任务 accepEx() 完成端口是投递一个任务 处理一个4.检测完成端口状态getCueuedCompletionStatus()5.在接收连接完成分支投递接收任务WSARecv()6.在接收数据完成分支投递发送任务WSA

2022-03-15 16:01:16 927

原创 Tcp造成粘包的原因及解决措施

粘包的概念:TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。粘包可能由发送方造成,也可能由接收方造成。只有TCP有粘包现象,UDP永远不会粘包粘包不一定会发生粘包的原因:发送端原因: 由于TCP协议本身的机制(面向连接的可靠地协议-三次握手机制)客户端与服务器会维持一个连接(Channel),数据在连接不断开的情况下,可以持续不断地将多个数据包发往服务器,但是如果发送的网络数据包太小,那么他本身会启用Nagle算

2022-02-24 17:34:13 3625

原创 网络专题六:epoll reactor模式封装

Reactor 模型首先来回想一下普通函数调用的机制:程序调用某函数,函数执行,程序等待,函数将 结果和控制权返回给程序,程序继续处理。Reactor 释义“反应堆”,是一种事件驱动机制。 和普通函数调用的不同之处在于:应用程序不是主动的调用某个 API 完成处理,而是恰恰 相反,Reactor 逆置了事件处理流程,应用程序需要提供相应的接口并注册到 Reactor 上, 如果相应的时间发生,Reactor 将主动调用应用程序注册的接口,这些接口又称为“回调函 数”。

2021-10-20 16:15:10 180

原创 网路专题五:select和epoll的区别

相同点:1、IO模型都属于多路复用IO 依然是同步IO模型2、select,poll实现都需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替。区别:1、FD剧增后带来的IO效率问题select因为每次调用时都会对连接进行线性遍历,所以随着FD的增加会造成遍历速度慢的“线性下降性能问题”。epoll因为epoll内核中实现是根据每个fd上的call..

2021-10-18 18:09:25 790

原创 网络专题四:epoll实现的基本服务端程序

epoll的两种触发方式:代码实现如下:#include <sys/epoll.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<netinet/tcp.h>#include<unistd.h>#include <arpa/inet.h>#include <errno.h>#define EPOLL_SI.

2021-10-18 18:02:30 373

原创 网络专题三:select实现基本服务端

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<netinet/tcp.h>#include<unistd.h>#include <arpa/inet.h>#include <errno.h>int main() { int sockfd = socket(AF_INET,SOCK_STREAM,0); ...

2021-10-18 17:58:20 138

原创 网络专题二:信号驱动IO

信号驱动IO是由操作系统回调到用户态的一种网络IO模型:首先我们允许套接口进行信号驱动 I/O,并安装一个信号处理函数,进程继续运行并不阻 塞。当数据准备好时,进程会收到一个 SIGIO 信号,可以在信号处理函数中调用 I/O 操作函 数处理数据。当数据报准备好读取时,内核就为该进程产生一个 SIGIO 信号。我们随后既可 以在信号处理函数中调用 read 读取数据报,并通知主循环数据已准备好待处理,也可以立 即通知主循环,让它来读取数据报。无论如何处理 SIGIO 信号,这种模型的

2021-10-15 17:28:51 844

原创 网络专题一:五种网络IO模型

网络 IO,会涉及到两个系统对象,一个是用户空间调用 IO 的进程或者线程,另一个是内核 空间的内核系统,比如发生 IO 操作 read 时,它会经历两个阶段: 1. 等待数据准备就绪 2. 将数据从内核拷贝到进程或者线程中。 因为在以上两个阶段上各有不同的情况,所以出现了多种网络 IO 模型1、阻塞 IO(blocking IO)在 linux 中,默认情况下所有的 socket 都是 blocking,一个典型的读操作流程 当用户进程调用了 read 这个系统调用,

2021-10-15 15:04:41 175

原创 仿照nginx手写内存池

内存池能解的问题:解决频繁调用内存申请释放产生大量的内存碎片,从而导致内存分配失败,还可以降低内存申请的损耗。我们实现的线程池按照内存的的页 4k大小分为 大块内存申请和小块内存申请(当然也可以按照你自己定义的大小来决定大小块儿的分配),在线程池初始化的时候我们会先分配一个小小块儿内存,至于大块儿内存不我们先不管。下面我们讲讲小块内存节点的数据结构我们在来看看大块儿内存的分配如下图所示:下面我们来定义这三种数据结构:1.小块儿内存节点struct mp_node_s{ u...

2021-10-14 16:50:09 263

原创 仿照nginx手写线程池采用c++11实现支持跨平台

1、为了方便线程和任务的管理,我们分别将任务和线程用双向链表串起来。下面介绍关于线程节点及任务节点的数据结构线程节点typedef struct NWORKER { thread threadid; int terminate; //控制退出 struct NWORKER* next;//把线程串起来方便管理退出 struct NWORKER* prev; struct NMANAGER* poo...

2021-10-12 14:56:54 170

转载 QML windows环境搭建---------记录分享

首先我们考察一下Windows下使用Qt的正确步骤, 其实学习就是一个探索的过程.我的系统是Win10, 去Qt官网下载Windows下的Qt, 版本当然是最新.http://download.qt.io/archive/qt/5.10/5.10.1/很明显, 我下载qt-opensource-windows-x86-5.10.1.exe运行开始安装这个版本的Qt支持VS2013, VS2015, VS2017. 对于一个有激情的热血程序员, 妥妥最新VS2017先关闭...

2020-08-14 16:41:06 322

转载 C++设计模式

C++ 常用设计模式(学习笔记)设计模式1、工厂模式在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式作为一种创建模式,一般在创建复杂对象时,考虑使用;在创建简单对象时,建议直接new完成一个实例对象的创建。1.1、简单工厂模式主要特点是需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类。使用简单工厂模式,我们只需要知道具体的产品型号就可以创建一个产品。缺点:工厂类集中了所有产品类的创建逻辑,如.

2020-08-06 17:37:07 173

原创 智能指针 auto_ptr、 shared_ptr 、weak_ptr的使用方法及注意事项

#include<iostream>#include<memory>using namespace std;///////////////////////////////auto_ptr///////////////////////////////////////////////////////////////boost中 scoped_ptr和auto_ptr一样 禁止用户进行拷贝和赋值头文件#include<boost/scoped_ptr.hpp>cl.

2020-07-29 15:58:16 206

原创 C++需要注意的相关细节

1、为什么需要最好将析构函数设置为虚函数 构造函数的调用顺序: 先构造基类 再构造子类 析构函数的调用顺序: 析构的时候先析构子类在析构基类class Base{public: Base() { cout << "Base()" << endl; } ~Base() { cout << "~Base()" << endl; } };...

2020-07-24 16:12:55 127

原创 Linux下Epoll多路复用的实现 边缘检测存在的诟病

边缘检测的诟病:如果两次连接同时到来,存在一个问题,只会触发一次,会导致丢掉一次连接。 解决办法设置socket为非阻塞。在检测时间信号时,一直便利事件数组,知道对应的socket为0 。下面看看具体的代码实现。#ifdef WIN32#pragma once#ifdef XSOCKET_EXPORTS#define XSOCKET_API __declspec(dllexport)#else#define XSOCKET_API __declspec(dllimport)#endif#.

2020-07-20 16:05:19 154

原创 Windows Linux 跨平台简单tcp实现 基于设置socket非阻塞,select连接超时控制。

#ifdef WIN32#pragma once#ifdef XSOCKET_EXPORTS#define XSOCKET_API __declspec(dllexport)#else#define XSOCKET_API __declspec(dllimport)#endif#else#define XSOCKET_API#endif // WIN32//tcp封装 在windows下封装成dll 在linux下封装成.so#include<string>...

2020-07-20 13:49:04 325

原创 跨平台 linux及windows中实现的tcp服务端 客户端可采用telnet进行测试 C11多线程实现

#include<stdio.h>//#pragma comment(lib, "Ws2_32.lib")#include <stdlib.h>#include<string.h>#include<thread>#ifdef WIN32#include<windows.h>#else#include <sys/types.h> /* See NOTES */#include <sys/sock...

2020-07-13 16:50:30 186

原创 配置windows与Linux系统之间的文件共享

linux环境下面安装 smaba软件在linux中创建共享文件 有windos通过IP去访问1、输入sudo apt-get install samba 安装samba 软件以当前目录为根目录进行设置编辑smb.conf 配置文件 输入vim /etc/samba/smb.conf 然后在该文件末尾新增如下代码保存 退出后 重启程序输入 pkill smbd 然后启动 输入smbd创建文件夹文件名字和上图新增代码中的path相同 mkdir code...

2020-07-10 17:53:03 122

原创 c++常见面试问题总结

c++和C语言的区别C语言是面向结构性语言,C++是面向对象语言 c语言是c++的子集,c++包含了c语言的全部词法和语法内容,比c语言多出了类。程序运行的保存的五个区堆 栈 常量 全局变量 代码区什么是面向对象:注重的是对象,当解决一个问题的时候,面向对象会把事务抽象成一个对象,就是说问题里有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,最后解决问题什么是面向结构:注重过程,当解决一个问题的时候,面向过程会把事情拆分成:一个个函数,然后按照一定...

2020-06-23 10:44:26 650 1

原创 WSAasyncSelect 异步选择消息模型

WSAasyncSelect 异步选择消息模型适用于简单对效率要求不太高的windows窗口程序。该模型windows为用户封装好了线程调用,以消息的方式通知accep/recv等事件是否已经发生,不用一直阻塞等待。下面是这种模型的简单代码实现:主要针对服务器accept 和recv做异步调用 主要看加出的部分:#include <tchar.h>#include ...

2020-04-26 15:51:29 482 1

原创 C++11 future async异步调用函数 基础用法了解

/*解决主线程和子线程后期同步的问题 类似于windows中的事件*/#include "iostream"#include "future"#include "thread"using namespace std;int main(void){ promise<int>proms;//构建一个承若 auto& fut = proms.get_...

2020-04-22 17:31:05 432

原创 TCP文件传输-二级流水线高效模式具体代码实现 mutex 条件变量condition_variable futrue运用

相比与上一篇那种线程同步方式,上篇利用async的生命周期作为同步点。而实际情况中 子线程不会一直退出和不断的开启,我门需要人为的控制线程同步且退出.这里我门采用队列的方式,主线程接收完数据往队列里面投递,通知子线程,子线程负责取数据 子线程数据处理结束后会继续通知主线程,主线层继续投递。 最后利用futrue控制程序的退出.//-------------------------------...

2020-04-22 17:13:20 301

原创 TCP文件传输-二级流水线高效模式具体代码实现 future实现双缓冲区切换同步

双缓冲区 二级流水线高效模式,这样可以保证程序在不停的接收和写文件,文件IO操作和网络recv同时进行本客户端采用了在C++11中引入了async异步调用函数,其封装了异步(多线程)实现的复杂过程。采用futrue 对双缓冲区切换的同步//-----------------------------------------------------------------------------...

2020-04-22 16:56:49 3733

原创 UDP单播 组播 广播 区别及简单实现

无论是tcp还是udp 服务器都必须绑定prot、Ip,客户端可以有选择性。udp单播: 单播只能是发送方往接收方指定的IP 端口发送数据组播需具备的条件 1、接收方设置组播属性及组播号 2、发送方往接收方定义的组播地址发送 3、服务器客户端端口号需要一致广播需具备的条件 1、接收方设置广播属性 2、发送方往接收方定义的组播地址发送 3、服务器客户端端口号需要一致组播和单...

2020-04-22 16:40:20 11794

原创 TCP文件传输-单缓冲区模式

单缓冲区模式文件传输模式相比于数组的好处是,文件IO操作和网络recv同时进行,这样提高效率下面来看看代码:服务器代码如下:#include <Winsock2.h>#include <iostream>#include <thread>#include<fstream>#pragma comment(lib, "Ws2_32.l...

2020-04-20 10:06:56 283

原创 TCP三次握手分析 以及字符串的发送接收 客户端采用异步选择事件模型

有图有真相 直接上图简述Tcp的特点:上图吧简述tcp的三次握手Connet 客户端请求连接 发送字段syn = 1Accept 服务器确认接收客户端的连接 回复syn = 1 ack=1;Write 客户端向服务器发送ack = 1四次挥手:假设客户端先发起断连客户端向服务器发送fin = 1 请求释放连接服务器端收到后...

2020-04-09 15:40:13 649

原创 ISO网络七层模型

1、物理层:负责最后将信息编码成电流脉冲或其它信号用于网上传输如发送电信号的硬件等,大多物理层和链路层几乎都是配套的 以前的HUB集线器就是工作在物理层2、链路层:交换机数据传输 硬件单片机程序,单片机上面的汇编,控制寄存器,操作一组硬件,维持底层信号的连接,mac 驱动等都是工作在数据链路层。协议包括(ethenet:IEE802.3以太网协议、IEEE802.11WiFi、 bulue to...

2020-04-08 17:58:42 11328

原创 C++ 跨平台promise 类似于windows中的事件

/*解决主线程和子线程后期同步的问题 类似于windows中的事件*/#include "iostream"#include "future"#include "thread"using namespace std;int main(void){ promise<int>proms;//构建一个承若 auto& fut = proms.get_...

2020-04-08 10:08:54 156

原创 C11线程 mutex lambda表达式 锁卫视

#include "iostream"#include "thread"#include "mutex" //c++11提供的互斥锁 跨平台using namespace std;int g_iticket = 100;void bar(void);void bar1(void);std:: mutex mx; int main(void){...

2020-04-08 09:50:52 421

原创 临界区 CRITICAL_SECTION 死锁问题解析

临界区为非内核对象,优点速度快,效率高,缺点时间不好控制,有可能第二个线程永远进不去 所以需要人为的在执行完原子操作后sleep()把进入的线程的时间片让出来和mutex相似,也是进去一个就关门了 唯一不同的是两个函数的使用时候存在死锁的问题,不是操作系统控制,时间片不好控制下面为死锁问题复现下面刚进去a 睡眠20ms 20ms是人为放大的间隙那边b进去了等到释放a才能进去 而...

2020-04-08 09:33:11 1280

原创 Windwos下的互斥锁,事件以及事件的手动重置和自动重置的区别

事件的自动重置:两个线层同时访问一个函数,该函数会对全局变量进行操作,用事件进行互斥,假设这个事件初始化有信号 在经过WAITFORSIGALOBJECT()后事件就会变为没有信号,另外一个线程无法进去,第一个线程操作完需设置为有信号 setEvent(events);使事件变成有信号后,第二个线程才能进入。事件的手动重置:相当于一个用户(线层)经过WaitForSingleObject...

2020-04-07 18:23:25 571

转载 WSAEventSelect模型 记录分享

WSAEventSelect模型是也称异步事件选择模型Windows Sockets提供的一个有用异步I/O模型。该模型允许在一个或者多个套接字上接收以事件为基础的网络事件通知。Windows Sockets应用程序在创建套接字后,调用WSAEventSelect()函数,将一个事件对象与网络事件集合关联在一起。当网络事件发生时,应用程序以事件的形式接收网络事件通知。初始化网络环境,创建一个监...

2020-04-02 17:52:56 374

原创 linux基础学习分享记录

linux层次接口依次从下往上系统程序-》kernel内核》运行程序》shell (人际交互 外壳)》应用默认文件系统类型EXT3 EXT4 ubunto 采用EXT4 SWAP类型的文件系统只在linux交换分区中被使用linux系统至少要两个分区:根分区(EXT4)和内存交换分区(swap类型)linux文件属性:文件名只能字母 、数字。下划线、圆点等组成文件类型:普通文件...

2020-04-02 09:31:09 233

原创 解决程序启动0xc00007b报错

按照以下顺序:依次按照以下排列顺序尝试:1、排除库不对,确保你程序中使用第三方dll和你程序位数匹配,如果是Qt程序,先确认你使用的Qt库是32还是64,和你程序是否匹配。2、上面排除后依然无法解决,下载vs的运行库 我的资源里包含各个版本的vs运行库3、上面依然无法解决,最后尝试下载drectx修复工具进行修复。按照上面顺序检查,一定能解决这个报错。vs运行库Micros...

2020-03-24 10:43:32 1055

原创 mysql学习笔记心得

mysql 安装:官网下载mysql安装包,解压后,在当前bin目录下打开cmd 执行mysqld --isntallmysql -uroot windows登录本机mysql (windows下默认没有密码)mysql --install 安装net start mysql 启动服务mysql -h -u -p 登录mysql常用函数:select version();'...

2020-03-18 15:46:02 328

原创 error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * 及QtMsBuild: could not locate...

针对标题问题:一般是moc文件未包含到工程里面造成的,新建筛选器 将所有的moc_*.cpp,ui_*.h添加进去重新编译即可。如果上述两种文件丢失,可以由下面配置vs属性 根据源码重新生成。(也可以解决 :QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly.)这种问题下面前提是你...

2019-11-18 17:39:32 1018

原创 I420转RGB24

I420也叫IYUV,也叫YUV420 。 采集卡采集视屏数据通常为I420 经过转换成rgb24后 可以对图像进行各种处理。下面来说说i420转rgb24://rgbA放在全局 不然每次重新分配浪费时间 unsigned char* I420ToRGBA(const unsigned char *src, int width, int he

2017-10-12 17:23:54 4137

原创 解决ORALCE OCCI方式getString()报错,以及将getString()放在while循环里面报错的问题

getstring()报错主要是oracle10g兼容性问题 可以下载11g ,11g也可以连接10g的服务器!!!

2017-09-14 16:10:02 2806 2

C利用hredis连接Redis集群

可以连接redis集群 执行写入 读取操作

2022-06-08

makefile构建的入门级工程

配合这篇文章看 https://mp.csdn.net/mp_blog/creation/editor/124693431?spm=1010.2135.3001.5352

2022-05-11

基于epoll实现http1.1服务器 支持php参数传递及html的c++网络服务器

基于Tcp、epoll实现http1.1服务器 支持php参数传递及html,该程序可以直接放到虚拟机编译运行,测试结合浏览器进行访问

2020-07-23

DirectX_vs运行库.rar

该资源包括directX修复工具、及各个版本的vs运行时库,配合我博客检查,一定能解决你的报错问题。

2020-03-24

空空如也

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

TA关注的人

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