自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(103)
  • 问答 (6)
  • 收藏
  • 关注

原创 Clion不能debug的问题

#set(CMAKE_BUILD_TYPE "RELEASE")set(CMAKE_BUILD_TYPE Debug)将cmakelist中的release换成debug

2021-10-13 15:52:56 2410

原创 在win10只能创建16360个socket?(Linux端口查询)

本来要连7W个链接,发现却只能连16360,于是通过下面的命令查询,发现win10也就16384个端口。(win7有6w多个端口)解决方法,通过以下命令修改://ipv4链接端口从1025到64510号,包含1025号netsh int ipv4 set dynamicport tcp start=1025 num=64510netsh int ipv4 set dynamicport udp start=1025 num=64510netsh int ipv6 set dynamicport t

2021-06-04 18:00:30 787

原创 C++ new重载能和原始new一起使用吗?

2021-03-31 16:57:17 193

原创 多线程并发select网络V2.0

一.新增项目:1.增加了自定义服务端继承。2.计数器封装在服务端三大项中二。服务端server。cpp#include"EasyTcpServer.hpp"#include<thread>bool g_bRun = true;void cmdThread(){ while (true) { char cmdBuf[256] = {}; scanf_s("%s", cmdBuf); if (0 == strcmp(cmdBuf, "exit")) {

2021-03-29 21:23:28 149

原创 内存池链表逻辑

1.上一个链表节点的next指向下一个节点,当前的链表节点的next必须为空MemoryBlock* _pTempbefore = _pHeader;for (size_t i = 1; i < _nBlockSize; i++) { //第二块开始后开始储存数据 MemoryBlock* pTemp = (MemoryBlock*)(_pBuf + (i * (_nSize + sizeof(MemoryBlock)))); pTemp->bPool = true;

2021-03-29 21:22:57 132

原创 将数据包一次发送一个字节或者一次发送一个包

1.一次发送一个包int SendData(DataHeader* header,int nLen) { int ret = SOCKET_ERROR; //isRun is bool && header 是不是为空 if (isRun() && header) { //int _stdcall send() _stdcall意思为从右往左压入栈(0-》header->dataLength->header->_sock) ret=

2021-03-29 21:22:29 470

原创 如何增加服务端的处理效率

1.业务分离。发送和接收不能放在一个线程中,因为发送比接收的效率慢2.分离数据,就涉及共享数据,就需要消费者和生产者

2021-03-29 21:22:13 122

原创 服务器收发分离

发送cell基类#ifndef _CELL_TASK_H_#include<thread>#include<mutex>#include<list>//快速增加删除任务#include<functional>#include<iostream>//任务类型-基类class CellTask{public: CellTask() { } virtual ~CellTask() { } virtual voi

2021-03-29 21:21:19 129

原创 内存池申请内存和释放内存

//申请内存 void *allocMem(size_t size) { //当内存池中可放下 if (size<=MAX_MEMORY_SIZE) { //szAlloc 是这个数据的大小,allocMemory是去分配这个数据 return _szAlloc[size]->allocMemory(size); } else//当内存池中不可以放下,就在其他地方开辟新内存 { MemoryBlock* pReturn = (MemoryBlock*

2021-03-29 21:20:55 181

原创 C++ : 引发了异常: 写入访问权限冲突。 this 是 nullptr

1.一般是初始化了参数,却没有给参数空间,查找问题,看构造里是否初始化,初始化的时候是否给了空间。特别是单例模式中,初始化一定要给空间。

2021-03-29 21:20:39 5212

原创 多线程内存池

1.实现多线程创建和delete内存池2.加速存取速度3.创建速度和系统new,delete开辟内存趋近一致。4.防止内存碎片一.main/** Setup the memory pool*/#include"Alloctor.h"#include<iostream>#include<thread>#include<mutex>#include"CELLTimestamp.hpp"using namespace std;mutex m;c

2021-03-29 21:20:11 157

原创 共享指针usecount

std::shared_ptr<aa>b = std::make_shared<aa>(); std::shared_ptr<aa>c = b; std::cout << "c use count" << c.use_count() << std::endl; std::cout << "b use count" << b.use_count() << std::endl;输出 c.use.

2021-03-29 21:17:27 441

原创 修改onRun函数增加server处理效率

//备份客户socket fd_set fd_set _fdRead_bak; //客户列表是否有变化 bool _clients_change; SOCKET _maxSock; std::map<SOCKET,ClientSocket*>_clients; //Deal msg bool OnRun() { _clients_change = true; while (isRun()) { //2.没有新的client加入,clientbuff就是0

2021-03-16 11:19:42 127

原创 多线程select通信网络架构( 详细注释)每秒百万数据包收发

一。客户端/*用封装的形式,将客户端封装起来*///防止重编译#ifndef _EasyTcpClient_hpp_#define _EasyTcpClient_hpp_//inet_addr#define _WINSOCK_DEPRECATED_NO_WARNINGS#ifdef _WIN32#define FD_SETSIZE 1024#define WIN32_LEAN_AND_MEAN #include<Windows.h> #include<WinSoc

2021-03-14 09:29:11 241

原创 for 循环中不能使用size_t 做减减

size_t i = -5; size_t a = -1; std::cout << i << " ...."<<a<<std::endl;如若是if(size_t i = a ;i<=0;i++)当真的计算到 i=-1的时候就跳转到4294 造成死循环

2021-03-10 17:57:12 306

原创 如何使用vs2019 查看函数消耗cpu的效率

1.正常开发过程中,当我们实现整体工程,或者一个模块功能后,我们需要进一步优化这个模块的效率。这时我们就需要使用vs中的性能探测器,主要帮我我们检测各个函数在整个程序运行时占cpu的比率。2.如何使用。1.将我们要检测的项目设置为启动项,使用alt+F2 打开性能探测器。这时最好将项目设置为release。这时会运行项目。项目运行结束后,会有一个项目分析报告,排在越前面,占CPU比率越高的,我们就应该去优化。点击函数,跳转到函数报告。这时我们就可以看见在这个函数中,哪个函数占CPU得运算效率

2021-03-09 16:56:55 5227

原创 多线程数组的两种写法

1.将线程分组std::thread t1(cmdThread); t1.detach(); std:: thread t2[tCount]; for (size_t i = 0; i < tCount; i++) { t2[i] = std::thread(sendThread, i + 1); } for (size_t i = 0; i < tCount; i++) { t2[i].detach(); }2.创建相同线程对向名 仍然可以运行,不知道为什么,有

2021-03-09 15:55:28 168

原创 在vs下如何看C++汇编语言

1.先给程序打断点2.右击想看的汇编操作点击转到反汇编,就可以看见汇编3.查看汇编语言

2021-03-09 10:15:22 1417

原创 sockaddr_in与cSock = accept(_sock, (sockaddr*)&clientAddr, &nAddrLen);

我在写服务使用socket端绑定端口号和ip的时候,发现sockaddr_in需要绑定很多参数,创建完对象_sin后需要传入参数网络类型AF_INET和端口port,还有ip。然后将sockaddr_in和服务端对象的_sock绑定。然而当我用sockaddr_in去接收accept的时候发现sockaddr_in没有那么多传入参数,甚至只是创建了一个sockaddr_in的对象clientAddr就直接传入了。我很纳闷,客户端的参数在哪呢?是不是任何一个客户端都可以accept?后来发现还真是cSo

2021-03-08 17:59:34 485

原创 sizeof 和 auto的用法

1.当你想传输一个结构体,却不知道他多长的时候,可以直接带编译前使用int a =sizeof(结构体)看看这个结构体的长度2.当你不知道一个返回对象的类型的时候可以使用auto a = 对象;来查看这个对象的类型...

2021-03-08 10:33:53 122

原创 windows下 FDSETSIZE 如何突破64链接限制

在#include<WinSock2.h> 前提前定义 FD_SETSIZE#ifdef _WIN32#define FD_SETSIZE 1024#define WIN32_LEAN_AND_MEAN #include<Windows.h> #include<WinSock2.h>

2021-03-08 08:59:54 483

原创 1gb 网络收发通信服务端与客户端

一.服务端#ifndef _EasyTcpServer_hpp_#define _EasyTcpServer_hpp_#ifdef _WIN32#define WIN32_LEAN_AND_MEAN#define _WINSOCK_DEPRECATED_NO_WARNINGS//winsock2一定要在windows前,否则会有宏定义重编译问题。sock2是新库,windows是老库。#include<WinSock2.h>#include<Windows.h>#p

2021-03-07 16:01:51 158

原创 栈空间与堆空间

一。在堆空间创建客户端10个全部创建成功int main(){ //start up the thread const int cCount = 10; EasyTcpClient* client[cCount]; int a = sizeof(client[1]); for (int n = 0; n < cCount; n++) { client[n] = new EasyTcpClient; client[n]->Connect("127.0.0.1", 45

2021-03-06 20:35:15 83

原创 如何写好一个.h头文件

//1.先要声明命名空间namespace pcl{ /** \brief @b Registration represents the base registration class for general purpose, ICP-like methods. * \author Radu B. Rusu, Michael Dixon * \ingroup registration *///2.创建模板类子类 template <typename PointSo

2021-03-05 16:41:10 237

原创 boost智能指针与vector

一.以PCL点云库为例子typedef pcl::PointCloud<PointT> PointCloud;typedef typename PointCloud::Ptr PointCloudPtr;typedef typename PointCloud::ConstPtr PointCloudConstPtr;//使用typedef的原因, 因为shared_ptr是个模板类,typedef起标示作用C++20之前都得声明typedef boost::shared_ptr &lt

2021-03-05 16:21:32 475

原创 Select网络模型2.0(封装模式)

1.实现功能,客户端,线程端不因收发数据阻塞2.实现封装一。消息结构文件//用来存放消息结构//传输的数据结构,最简单的数据包//每个函数的类型必须一样,而且在客户端和服务端传输和接收顺序一致,也就是内存对齐//long类型的在64位编译器下就是64位,而32位编译器下就是32位,//所以需要考虑平台和系统,关注是否内存对齐enum CMD{ CMD_LOGIN, CMD_LOGIN_RESULT, CMD_LOGOUT_RESULT, CMD_LOGOUT, CMD_NEW

2021-03-03 20:57:09 199 1

原创 无法解析的外部符号 “public: __thiscall EasyTcpServer::EasyTcpServer(void)“ (??0EasyTcpServer@@QAE@XZ),函数 _mai

问题:无法解析的外部符号 "public: __thiscall EasyTcpServer::EasyTcpServer(void)" (??0EasyTcpServer@@QAE@XZ),函数 _main 中引用了该符号原因没有定义类中的构造函数,也就是构造函数没有加“{}”。cpp文件是不能被引用的。...

2021-03-01 21:41:19 188

原创 ++i , i++

#include<iostream>using namespace std;int main(){ int array_[5] = { 1,2,3,4,5 }; int i = 0; cout << "i++" << array_[i++] << endl; cout << "i after i++ " << i << endl; i = 0; cout << "++i" << a

2021-02-25 10:01:03 65

原创 在CMakelist.txt中配置OpenMP

FIND_PACKAGE( OpenMP REQUIRED)if(OPENMP_FOUND)message("OPENMP FOUND")set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE

2021-02-24 18:04:19 1803

原创 pcl nearestKSearch

/** \brief Search for the k-nearest neighbors for the given query point. * \param[in] point the given query point * \param[in] k the number of neighbors to search for * \param[out] k_indices the resultant indices of the neighb

2021-02-24 15:22:17 3266 1

原创 C++面试体汇总

1.已知memcpy的函数为: void* memcpy(void dest , const void src , size_t count)其中dest是目的指针,src是源指针。不调用c++/c的memcpy库函数,请编写memcpy。void* memcpy(void *dst, const void *src, size_t count) { //安全检查 assert( (dst != NULL) && (src != NULL) ); uns

2021-02-24 10:25:30 68

原创 C++编码规范

写一个C++编码规范,想到什么写什么,大家如果有想法欢迎评论交流。1.什么时候用inline 内联函数当使用set,get这样短的,执行效率快的函数使用内敛。剩下的可以不用使用内联2.函数注释怎么加/** \brief 介绍函数* \return return_varaible 介绍返回什么值* \param param_name 介绍传入变量* /3.类成员变量明明在成员变量后面加 " _ " 表示这是成员变量。int a_;char b_;...

2021-02-24 09:55:37 99

原创 Eigen Matrix 从哪开始计数

//2行2列矩阵 MatrixXd m(2,2);//矩阵内计数从0行0列开始//1行1列的点为(0,0)点 m(0,0) = 3; m(1,0) = 2.5; m(0,1) = -1; m(1,1) = m(1,0) + m(0,1);

2021-02-24 09:33:02 188

原创 PointCloud 的data的疑惑

using PointCloudSource=pcl::PointCloud<PointSource>; using PointSourcePtr=typename PointCloudSource::Ptr ; using PointCloudSourceConstPtr= typename PointCloudSource ::ConstPtr ; inline void setInputSource(const PointCloudSourceConstP.

2021-02-23 16:07:58 366

原创 c++ lambda

https://www.cnblogs.com/jimodetiantang/p/9016826.html

2021-02-23 14:27:05 61

原创 std::function

1.先看大神写的function文章https://blog.csdn.net/weixin_39554266/article/details/828552942.对于std::function的理解function等于一个万能函数模板,只需要定义函数的参数内容,就可以构建一个空函数(空函数:只有传入参数,没有实现内容,和声明一样。)所以当这个空函数等于=不同的实现形式,例如直接赋值一个函数到空函数上,或者空函数等于一个lambda,用lambda实现函数,都可以。function等于一个函数指针

2021-02-23 14:21:16 109

原创 Using typename的理解

我们经常在写一个子类去继承另一个父类的时候,会看到有人使用using functionname= typename namespace::classname<template>::classfunctionname;using InputKdTree=typename pcl::Registration<PointSource,PointTarget>::KdTree;using的作用:当你想要去调用继承类中的已经写好的成员函数的时候,可以使用using给这个函数在你的子函

2021-02-23 09:20:49 2235

原创 ndt_omp和pcl1.8冲突

我在安装了pcl1.8的时候。发现之前能运行的ndt_omp无法编译。发现缺少pcl_rosCMake Error at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package): Could not find a package configuration file provided by "pcl_ros" with any of the following names: pcl_rosConf

2021-02-22 21:37:13 1229

原创 特征值分解与奇异值分解SVD

https://www.imooc.com/article/267351?block_id=tuijian_wz先看这篇文章。1.什么是矩阵一件事情,有多个纬度影响。就像球员卡的各项指标影响一个球员的表现一样。一个指标就是一个维度。比如一个球员跑的快,那这场比赛里面总体跑动的几率多于总体射门的几率。那这个球员这场表选在整队里应该是最突出的。而一场比赛射门的几率多余跑动的几率,那么射门能力强的球员这场比赛的表现能力是强于跑的快的球员的。一个球员有多个纬度,跑动的能力,射门的能力,防守的能力,传球的

2021-02-04 09:59:31 112 1

原创 C++读取一个文件下所有文件

读取所有文件#include<iostream>#include<string>#include<vector>#include<io.h>using namespace std;void getFiles(string path, vector<string>&files){ //文件句柄 //千万不要用long,运行的时候会暴内存异常 要用intptr_t intptr_t hFile = 0; //文件信息 s

2021-01-30 18:20:00 347

空空如也

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

TA关注的人

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