- 博客(29)
- 收藏
- 关注
原创 VS+QT开发 找不到宏$(Qt_INCLUDEPATH_) $(Qt_LIBS_)
问题:在VS+QT开发环境,项目右键->属性->C/C++->常规->附加包含目录->宏(位置在右下角)->右侧新弹出的属性框内搜索Qt_INCLUDEPATH_ 找不到的场景的解决办法。
2024-11-04 17:46:13 231
原创 RDMA技术六:数据流过程
WQE:Work Queue Element,工作队列元素,WQE可以认为是一种“任务说明”,这个工作请求是软件下发给硬件的,这份说明中包含了软件所希望硬件去做的任务以及有关这个任务的详细信息。比如,某一份任务是这样的:“我想把位于地址0x12345678(虚拟内存地址,并非实际内存地址)的长度为10字节的数据发送给对面的节点”,硬件接到任务之后,就会通过DMA去内存中取数据,组装数据包,然后发送。CQE中描述了某个任务是被正确无误的执行,还是遇到了错误,如果遇到了错误,那么错误的原因是什么。
2024-10-29 16:46:39 264
原创 RMDA技术五:NetworkDirect
服务器:2台网卡:Intel Ethernet Network Adapter E810-XXV-4 (具备RDMA能力)
2024-10-29 11:35:27 305
原创 RDMA技术三:NetworkDirect
其中,RDMA功能由具备RDMA能力的网络适配器提供,NetworkDirect可以基于ib、iwarp或roce三种协议中的一种,而NetworkDirect允许应用程序开发人员,通过访问和使用具备RDMA能力的网卡制造商通过提供的接口, 实现使用网卡的硬件功能。NetworkDirect的Provider不是真正的COM对象,NetworkDirect的Provider不会再系统中注册特定的对象。能找到计算机上所有的Provider,通过对比实例化时的参数,找到注册过的Provider。
2024-10-29 10:36:03 712
原创 RDMA技术二:编程
Verbs API提供了一套完整的RDMA操作函数,包括内存注册、队列对(Queue Pair, QP)的创建和管理、数据发送和接收等。以上代码只是示例性质的伪代码,真实的RDMA编程需要更多的初始化和配置工作,包括设备查询、内存注册、队列对的创建和配置等。具体的RDMA编程细节可以参考相关的RDMA编程指南和文档。基于infiniband协议实现的示例:不管是基于协议中的哪一种协议,接口都是一样的,却别在于不同的电脑的硬件不同,协议不同而已。
2024-10-28 21:55:14 92
原创 RDMA技术一
RDMA( Remote Direct Memory Access )即Remote + DMA,意为远程直接地址访问。所谓“Remote”,本端节点可以访问“远端”节点的内存。所谓“Direct”,指的是可以像访问本地内存一样,绕过传统以太网复杂的TCP/IP网络协议栈读写远端内存,而这个过程对端是不感知的,而且这个读写过程的大部分工作是由硬件而不是软件完成的,即不需要内核参与。
2024-10-28 21:45:35 750
原创 RDMA技术零:windows+Socket编程
通过socket编程的代码,分析用户空间、内核空间和硬件在网络编程中的特点,引入 RDMA编程。
2024-10-28 17:33:34 402
原创 RDMA技术四:Network Direct
2.2.3 获取接Network Direct Adapter的接口,然后根据需求(send/recv或write/read)实现功能。中的方法:在一定条件下注册Network Direct Provider(NdV1Provider或者NdProvider)。2.2.1 注册Network Direct Provider。,找到所有的protocols,比较protocol中的。信息,找到Network Direct provider;来注册Network Direct Provider。
2024-10-24 14:51:24 374
原创 VS引用ws2def.h minwindef.h WinSock2.h时编译错误
涉及到windows网络编程,就引用了几个windows相关的库ws2def.h minwindef.h WinSock2.h,结果报错了,我就把所有cpp文件中除了#include 、#include 、#include (按照这个顺序包含头文件)以外的其他地方都注释掉,还是会报错。
2024-10-22 11:46:37 137
原创 DMA&RDMA
DMA全称为Direct Memory Access,即直接内存访问。意思是外设对内存的读/写过程可以不用CPU参与而直接进行。注意,并不是完全没有,cpu对读/写本身不控制,但是对读/写进行整体过程关注,而不是细节。2台电脑之间通过网路相连,相互之间发送大文件,就是RDMA的应用场景。传统网络的数据传输(如数据从电脑A到电脑B)的流程如下:电脑A上,在内存用户空间中的数据,需要经过CPU拷贝到内核空间的缓冲区中;
2024-10-18 21:14:51 672
原创 VS项目在release环境下开发时支持调试
项目在开发过程中,可能会使用各种各样的开发工具,例如VS,VS在编译生成EXE的过程中会默认编译的环境,release在默认的环境下是不支持开启调试功能(如下图),如果要开启调试功能,就需要修改VS在release环境下的配置。
2024-10-18 10:49:04 131
原创 win10+qt编译生成的exe文件在win server2019上发布时遇到的问题
解决办法:在qt的安装目录下找到对应的跨平台相关的文件,放在.exe相同的目录下。解决办法:在qt的安装目录下找到对应的dll文件,并放在exe相同的目录下。解决办法:在qt的安装目录下找到对应的dll文件,并放在exe相同的目录下。注意:不同的exe依赖的dll不同,根据报错的情况找到对应的dll。注意:不同的exe依赖的dll不同,根据报错的情况找到对应的dll。原因:exe依赖qt跨平台所需的库所在的文件。原因:exe依赖VC++相关的库。原因:exe依赖qt的库。
2024-10-17 16:08:28 261
原创 qt5.9.9+vs2017环境配置
2种方法:一种是VS上直接搜索关于QT的插件;另一种是QT官网上下载。下找到vsaddin目录,然后进行下载后缀名为vsix的文件。
2024-10-08 15:57:20 263
原创 几种排序算法的比较
1.分类:非线性时间比较类排序:通过比较来决定元素间的相对位置关系,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间比较类排序:不通过比较来决定元素间的相对位置关系,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间比较类排序。2.复杂度3.算法相关概念稳定:如果arr[i] = arr[j],i < j,排序后arr[i],arr[j]位置没变化。不稳定:如果arr[i] = arr[j],i < j,排序后arr
2020-09-13 22:22:33 166
原创 插入排序
1.时间复杂度n*n2.逻辑分析总的来说,是将数组分为2个部分,一个是有序部分,另一个是无序部分。将无序部分的数据依次取出,插入到有序部分,最终形成排序后的数组。3.代码template <class T>void InsertArr(T* arr, int len){ for (int i = 1; i < len; ++i) { T temp = arr[i]; // 取出被比较值 int j = i - 1; for (; j >= 0
2020-09-13 18:43:17 88
原创 排序算法之冒泡排序
1.特点冒泡排序是实现起来最简单,运算复杂度为n^2的算法。2.代码template <class T>void printArr(T* arr, int len){ for (int i = 0; i < len; ++i) { cout << arr[i] << " "; } cout << endl;}template <class T>void BubbleSort(T* arr, int len
2020-09-09 00:08:40 105
原创 链表之双链表
1.定义双链表是由一系列节点连接起来的数据结构,通过当前节点都可以找到前一个节点和下一个节点。2.特点使用方法,组成和内存存储方式等和单链表一样优点:可以找到某个节点的前驱和后继,可进可退。缺点:增加,删除节点复杂;因为每个节点的数据结构中多一个指针,所以多占一个指针的内存空间;3.实现template<class T> struct DNode {public: T value; DNode *prev; DNode *next;public: D
2020-09-08 23:33:16 433
原创 链表之单链表
1.定义单链表是由一系列连接在一起的节点构成,其中的每个节点都是一个数据结构。 2.使用方法单链表的节点通常是动态分配,使用和删除的,即单链表在程序运行时允许增大或缩小。3.组成非空单链表的第一个节点为单链表的头;每个节点由一个数据成员和一个指向下一个节点的指针(也被称为后继指针)组成,最后一个节点的后继指针被设置为nullptr表示链表的结束。 ...
2020-09-07 00:41:34 149
原创 数组
线性表之数组1.存储方式数组在内存中开辟一段连续的空间,按照先后顺序存储,前后相邻的两个元素之间的地址相邻。 2.数据的操作2.1读取找到需要读取的数据的位置pos,直接根据pos取值。2.2增加获取数组的大小,在数组的最后添加一个数据...
2020-09-06 18:13:53 83
原创 数据结构与算法的基本概念
书籍:c++数据结构与算法(第四版) Adam Drozdek著章节:第3章 链表3 综述:数组是程序设计语言自带的一种有效的组织数据的数据结构。但存在两个缺点,其一,程序在编译时需要知道数组的大小;其二,数据相邻,且连续存放,插入数据时,会移动部分其他的数据。相比之下,链表不存在上述两个缺点,因为链表存放的多个节点,每个节点的位置不固定,且每个节点信息里只有数据项和下个节点位置的指针...
2020-09-06 16:58:00 282
原创 超级指针的使用
一般来说,计算机程序分配内存在堆和栈上。在堆上的内存系统不会自动释放,需要人工释放,而在栈上的内存会自动释放。而,堆上的内存人工释放不是一件容易的事情,什么时刻释放和是否释放完全都是问题。本文模仿osg中osg::ref_ptr类,写了一个指针,自动释放分配的内存。// 声明一个类class Derive{public: Derive(){ std::cout <<...
2019-05-14 09:57:51 453
原创 基于g指针,d指针的数据隐藏
来自Qt源码中有关g指针和d指针的相关代码实例:// 第一段class Q_CORE_EXPORT QCoreApplication#ifndef QT_NO_QOBJECT: public QObject#endif{……Q_DECLARE_PRIVATE(QCoreApplication)public:……~QCoreApplication();……protect...
2019-05-13 21:06:42 111
原创 排序
1.快速排序1.1 思想:将原始数组划分成两个数组,第一个子数组中的元素小于或等于一个选定的关键字,这个关键字成为边界或者基准,同时,第二个子数组中的元素大于或等于边界。再继续对上述两个子数组进行排序,每个子数组选定一个新的边界。1.2 伪代码(C++)template<typename T>void quicksort(T data[], int first, int...
2018-10-09 01:05:52 143 1
原创 opencv2.4.9+VS2012 视频录像并分时段保存
#include "stdafx.h"#include "cv.h"#include "highgui.h"#include "iostream"using namespace std;const int NumFrame_per_video = 135;const int Num_Total_Frame_per_Video =1000 ;const int N
2016-04-28 10:59:55 750 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人