自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (1)
  • 收藏
  • 关注

原创 文件系统事件监听

epoll/IOCP监听文件更新

2024-03-10 12:22:31 515

转载 简单动态链接库加载器封装

简单动态链接库加载器封装

2024-03-05 21:23:25 39

原创 qt 软件发布(Windows)

①左下角开始菜单栏找到QT的命令交互对话框,如下图MSVC 2017 64-bit(第二步编译的类型选择64位或者32位)。注:一般软件还有安装引导程序,简单的软件可以在软件包中放一个安装脚本,复杂的软件,可能需要额外开发安装引导界面程序。③windeployqt -dir="xxx/xx/" # 将软件打包到xxx/xx目录。④将软件依赖的其他第三方dll以及配置文件拷贝到xxx/xx中exe可执行文件的同级目录。⑤完成软件打包,将xxx/xxx文件夹压缩,即可去生产环境测试。

2024-02-22 11:17:49 408

原创 搜狗开源框架Workflow网络模型分析

本篇博客分享了高性能后端服务框架workflow在windows系统下的网络模型实现原理,通过源码阅读,梳理了workflow中一个典型网络服务的开启步骤和异步网络事件的产生、触发以及处理所经历的过程,着手剥离了网络模型中的关键模块,在此基础上实现了一个高并发TCP Server,扩充实现了UDP并发服务器,开展了压力测试。

2024-02-02 21:09:24 637 2

原创 c++ 拆分函数返回值和参数类型

在c++中,函数参数类型和返回值类型通常是一个比较明确的信息,好像确实无需在这个上面费周折。然而,硬编码数据类型会让代码复用性下降,如果能够通过某种方式自动获取函数参数和返回值类型,对于代码的可复用性,可读性和整洁性都有较大的提升。上面的代码,gmock在使用的时候是配合宏实现不同类型函数的统一。

2023-10-30 11:24:07 214

原创 无锁队列Disruptor使用笔记

由于Disruptor原版是java开发的,而本人是从事C/C++开发工作的,期望找一个C/C++版本的实现,用到自己的工作中。Disruptor不对生产者和消费者的数量做限制,可以是单生产者->单消费者,单生产者->多消费者,多生产者->单消费者,以及多生产者->多消费者(这里的每个生产者和消费者都指的是一个线程,而不是某个抽象业务的类实例)。在竞争消费模式下,每条消息的真正被消费的时机是不确定的,有可能先入队的消息后被消费,因此可以看到打印顺序是乱的,这也是这种消费模式的重要特性。

2023-10-19 13:08:46 391

原创 masm 64位CPU汇编指令基础

【代码】masm 64位CPU汇编指令基础。

2023-09-09 14:25:50 339

原创 c语言面向对象开发

从第一节和第二节,我们清晰地看到C++和C是如何对应起来的,这个对应过程从侧面也证明了C++是C的超集,C++完全兼容C,C++代码总是可以写成C的形式。但是面对稍微复杂的项目,这个改写过程将变得极其痛苦,而C++编译器一定程度上就是为了将这个过程自动化而出现的,当然我们最终要的不是C的源码,而是能够运行的二进制机器码,所以C++编译器一步到位地生成了机器码,将中间过程封闭起来。继承和多态是c++的灵魂,如何使用c语言模拟这一机制,是使用c语言实现面向对象开发的关键。三. 从C++到C的自动化转换。

2023-08-21 09:39:01 120

原创 关于3D位姿旋转

3d 物体姿态变换,欧拉角,旋转矩阵,四元数相互转换

2023-08-17 09:41:53 908

原创 Lua脚本编程基础

三. lua与c/c++的互操作。2. function类型。3. userdata类型。2. boolean类型。3. numbers类型。4. string类型。4. thread类型。1. table类型。

2023-07-02 16:49:21 823

原创 C++类静态成员初始化顺序

存在多个全局变量时,它们的初始化顺序是未知的,如果某些全局变量初始化依赖了其他的全局变量,可能会诱发程序未定义行为,在进入main函数之前就崩溃。尤其是在c++类的静态成员之间,这种依赖关系还是挺常见的,一旦发生这种bug,是很难定位的,一来没办法debug,因为还没进入main就崩了,在一个这种问题可能还是偶发的,更难排查了。此时,派生类的静态成员就依赖了父类的静态成员,有可能派生类静态成员去执行初始化时,父类的静态成员尚未初始化,这样就直接导致程序异常退出。

2023-06-05 16:08:16 375

原创 关于socket的地址复用和端口复用技术与UDP并发

可以看作是内核级负载均衡。观察上述代码,可以注意到,当获知了客户端的源端口和源ip后,会将新udp socket连接到该客户端(执行了connect操作),这样一来,新的udp socket五元组就唯一确定了,下一次该客户端再发数据包,就会直接找到这个新的udp socket,放到指定缓冲区,而不会随机分配了。socket是系统级资源(区别于进程级和线程级,在本机上是全局唯一的),可以人为绑定本地ip和端口,与协议类型,对端ip,对端端口一起,作为该socket在本机上的唯一标识。

2023-05-24 18:41:46 2095

原创 c/c++ 结构体字节对齐规则

/ [b1][b2] offset=1, short数据默认的对齐参数为2,因此offset需要调整为2的整数倍,即offset调为2, 在前面数成员aa末尾填充一个字节。// [f1][f2][f3][f4] offset=17, float数据默认的对齐参数为4,offset调到20,所以在前面的数据成员e末尾填充3字节。// [d1][d2][d3][d4][d5][d6][d7][d8] offset=8, double数据对齐参数为8,不需要调整。struct D d;

2023-04-16 16:42:45 371

原创 TELNET 协议初探

TELNET通讯协议初探

2023-04-06 10:52:39 573

原创 编译器指令#pragma section的使用

pragma section() 指令的使用

2023-04-03 14:34:43 3498

原创 swig 使用案例

包含数组、结构体嵌套,函数指针传递等基本操作.

2023-03-10 20:55:19 557

原创 c++简单定时器实现

c++简单定时器实现。

2023-03-02 15:46:53 3793 2

原创 Ros中的轨迹规划模块

ROS中的运动规划

2023-01-30 16:49:43 2958 2

原创 ROS 笔记(一) 数据结构

ROS通讯中的自定义数据结构

2022-12-09 16:33:00 544

原创 网络通讯大小端转换c/c++

c/c++ 大小端字节序转换

2022-12-02 23:29:45 793

原创 windows 下包管理工具vcpkg安装

vcpkg包管理工具安装

2022-10-26 20:04:41 4900

原创 c/c++自定义通讯协议(TCP/UDP)

socket网络编程中的网络协议设计

2022-07-11 00:11:16 9215

原创 关于多线程编程想到的

1. 多线程编程实际上是一种"异步"编程。在单线程程序中,同一时刻线程只能干一件事,所有的任务都有序地执行,业务逻辑是连续的;2. 利用多核CPU,在物理层面上并行计算,引入多线程编程技术才有实际意义。3. 多线程程序,业务逻辑上是割裂的,因为想要将整个业务切割成多个部分放到不同的CPU上处理。这种割裂具体体现就是任务的回调函数,回调函数执行的部分就是被切分出来的剩余业务逻辑。4. 线程之间的数据传送应该是单向的,使用任务队列进行解耦。每个线程应该只关心自己的那部分,如果业务逻辑还需要切..

2022-03-02 10:13:48 221

原创 Innodb和Myisam索引

id name age country stand name 1 Dio Brando 121 埃及 世界 2 jonas 21 英国 null 3 Joseph 79 美国 隐者之紫 4 Kujo Jotaro 41 日本 白金之星 Innodb 索引[索引页]非主键索引和主键索引,都是"稀疏键值+子索引页地址"或者"稀疏键值+数据页地址"。[数据页]

2022-02-26 22:04:51 189

原创 QT 信号/槽与事件循环的关系

常见的信号槽的绑定如下:QObject::connect(&sender,&Sender::SignalFunc,&receiver,Receiver::SlotFunc,Qt::AutoConnection);//Qt::AutoConnection 为默认选项关于槽函数最终是在哪个线程执行的,引用一段说明:https://www.cnblogs.com/findumars/p/5031239.html1、自动连接(Auto Connection)这是默

2022-02-25 11:11:50 1557

原创 Mysql 索引原理/(图文)

没有一堆似是而非的类比,直白明了,一看就懂。原文地址:http://gk.link/a/11bZx图1. 主键索引(也叫聚簇索引)值得说明的是,如果知道要查的数据的主键,总是可以优先使用主键索引,根本不需要使用非聚簇索引。然而细细想来,这是很难做到的。因为对于主键的要求是唯一性,不能有重复,对于海量的数据,不可能做到每个主键有实际意义而且又唯一。在必须满足唯一性的前提下,主键只能设计的很抽象,抽象的东西很难直观反映出我们要查的数据的特点,所以在查询之前我们是很难知道主键的。所...

2022-02-24 20:57:36 404

原创 c++ 的new/delete

1. c++ 在全局定义了两个operator new和一个operator delete:① void* operator new(size_t size);//内部调用malloc(size)② void* operator new(size_t size, void* buf);//什么也不做,直接 return buf;③ void operator delete(void* buf);//内部调用free(buf);2. ClassA* ptr = new ClassA(...

2022-02-22 23:41:10 486

原创 c++ 继承关系中的虚函数表

1. 子类继承父类的虚函数表的方式是复制一份。存在虚函数的类,都有自己的虚函数表,不与其他类共用。2. 只要祖先类的某个函数被声明位virtual, 则在后代中无论是否显式地添加virtual,该函数一直都是虚的。3. 如果子类重写了某个虚函数,则该类的虚函数表对应位置上的虚函数地址会被覆盖。如果完全不重写,则子类的虚函数表里面的内容和父类虚函数表内容保持一致。4. 虚函数表类似于类的静态成员,被该类的所有实例共享。只不过该表是只读的,不存在线程安全问题。5. 实例对象在起始4字节处,会存放

2022-02-22 13:56:28 2918 2

原创 libevent 的http模块实现http服务器

首先声明,libevent的http模块是为单线程设计的,如果业务逻辑中有耗时操作,则需要自行设计线程池以便提高吞吐量,每个工作线程中都要运行一个event_base_loop和一个evhttp实例(这些evhttp实例需要用evhttp_bind_socket绑定到相同的端口上),具体参考官方issuehttps://github.com/libevent/libevent/issues/1001其次,evhttp 使用http1.1, 默认keep-alive是打开...

2022-02-16 15:41:30 3867

原创 windows 10 使用MSYS2 编译 x64位的ffmpeg

windows 下面编译ffmpeg真可谓折腾,网上资料大多是使用mingw+msys,而mingw(用来生成32位程序)内部集成了msys,但是mingw64却没有集成msys。所以当我想编译x64位的ffmpeg,就得手动搭建mingw64和msys的编译环境,比较费劲。msys2集成了mingw x86 和 mingw x64,就可以比较方便地切换编译环境。可以去msys2官方网站下载安装包:MSYS2也可以直接去清华大学软件站上下载安装,并根据其说明添加软件包镜像源:msys2 | ..

2021-12-22 15:53:01 2933

原创 c/c++ 消息队列(循环数组实现)

typedef struct _tagFIFO_QUE { void* cycleQue;//队列的起始地址 long long front;//队列的头偏移 long long rear;//队列的尾偏移 unsigned long dataSize;//元素的大小 unsigned long maxLen;//元素的个数*元素的大小}FIFO_QUE, *LPFIFO_QUE;static bool IsQueEmpty(LPFIFO_QUE que) {.

2021-12-09 09:26:59 994

原创 记录一次linux信号量sem_t使用bug

linux提供了互斥量pthread_mutex_t(pthread库) 用于线程间同步,进程间同步提供了信号量sem_t。如果把pthread_mutex_t放到共享内存中,并将其属性设置为PTHREAD_PROCESS_SHARED,则也能实现进程间的同步,相对而言比较麻烦。一般直接使用信号量更加方便。这里讨论使用具名信号量以便在无血缘关系的进程之间做同步,主要涉及下面5个函数:sem_open();//打开或者创建信号量sem_wait();//获取信号量sem_post();//挂

2021-12-08 19:07:04 1271

原创 windows 10 编译 libevent库

0.编译openssl如果要完全编译,需要提前编译openssl库。对应的源码:https://github.com/openssl/openssl/archive/master.zip如果不需要用到加密,可以不用编译openssl。openssl windows编译安装步骤:需要工具visual studio, perl 脚本工具visual studio 自行安装perel 工具:下载 ActivePerl-5.24.3.2404-MSWin32-x6...

2021-10-28 17:07:16 1230

原创 简单的线程池c/c++

linux 下的C语言版本:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <pthread.h>#include <unistd.h>#define LL_INSERT(item,list) do{\ item->prev = NULL;\ item->next = l

2021-10-15 17:52:13 226

原创 reactor模式学习

1.什么是reactor模式2.reactor模式解决的问题是什么3.reactor模式的实现方式有哪些一. 什么是reactor模式 讲这个之前,先整体上看看,如今服务端架构设计都是怎么做的。(1) 经典的Thread-Based Architecture(线程模式)。 每来一个客户端,就用一个线程与客户端对接,与客户端之间的I/O操作也都放在子线程之中。 优点: 简单直观 缺点:链接和线程始终保持一一对应的关系。...

2021-10-14 11:46:18 971 1

原创 c++ grpc 实现一个传图服务(异步方式,流式接收与发送)

异步传输官方示例只给了普通对象的传输,没有流式传输示例,这给我的学习带来了很大的困难。搜了好多,再加上自己的摸索调试,总算实现了grpc的异步流式传输(目前只是单向流,服务端推流至客户端,或者客户端上送流至服务端)。1.proto文件与前面的同步传图一样,自然生成的demo.grpc.pb.hdemo.grpc.pb.cc demo.pb.hdemo.pb.cc也是一样的。2.服务端程序#include <algorithm>#include <chro......

2021-08-11 14:39:44 5326 2

原创 c++ grpc 实现一个传图服务(同步方式,流式传输)

主要参考hollowworld以及route_guide程序示例。同步方式由于官方给的例子里面有,所以相对容易。为了增加点难度顺便学习一下protobuf,所以接口定义文件中用了比较复杂的字典和枚举数据结构。1. proto文件:// image transmission serversyntax = "proto3";option java_multiple_files = true;option java_package = "io.grpc.examples.ImgT...

2021-08-11 13:40:29 3127 1

原创 c++ 简单的生产者消费者模式

生产者消费者模型并不属于面向对象的23中设计模式之一,实际上是结构化编程思想中的一种经典模式,使用非常广泛。而在面向对象编程过程中也不会只是面向对象,通常是与结构化编程相辅相成的。好了闲话不多说,下面的例子非常简单的使用了std::thread来实现一个生产者消费者模型。#include <iostream>#include <thread>#include <chrono>#include <queue>#include &lt...

2021-08-10 11:24:18 1098

原创 c++ 单例模式+反射机制

#include <iostream>#include <functional>#include <map>#include <string>#include <mutex>//#define func std::function<void*(void)>typedef void* (*func)(void);using namespace std;class GenerateFactory{public: .

2021-08-09 10:07:53 213

原创 windows系统下编译使用darknet

windows: darknet 编译与使用 (有cuda ,没有OPENCV)darknet调用:.\darknet.exe detector test .\data\number.data .\cfg\yolov4-tiny_test.cfg yolov4-tiny_best.weights xxx.jpgyolo测试用例调用.\yolo_console_dll.exe xxx.names xxx_test.cfg xxx.weights xx.jpg一. 编译 darknet.

2021-04-15 12:05:48 1706 3

stip-wintools.rar

在windows上运行时空兴趣点检测工具时,一般会报缺少dll库。因为stip可执行程序在编译的时候用到了第三方库opencv,所以需要使用opencv里面的dll文件。stip-1.1程序创建于2008年,作者当时采用的是opencv1.0,所以我们必须提供opencv1.0的库文件(所以后缀为100,如cv100.dll),把本资源提供的dll文件拷贝到stip-1.1文件夹下面,就能跑通程序了,无需再去安装opencv1.0。(读取视频的时候也用到了较老的库,所以可能系统自带的库无法使用,造成could not initialize capturing.. 我们应当再装一个Xvid视频解码软件,用最新的就行,本资源提供了Xvid-1.3.2-20110601.exe,双击一路默认安装)

2019-11-19

空空如也

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

TA关注的人

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