自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 go Fscanf 在读取文件时出现的问题

先要明白Fscanf的工作原理Fscanf在遇到\n才结束遇到\r时就会把\r替换成0这就有个问题,要注意自己的文本换行符是什么,在Windows下就是\r\n,在Linux,Mac下就是\n,也就是说这里有个坑,代码在Linux和Mac下读取数据文件是正常的,在Windows下就会遇到各种行末尾有个0,网上办法用什么替换啊,用什么自定义Scan函数啊,太麻烦了,直接使用自带IDE...

2019-01-06 11:06:42 1668 4

原创 VSCode+CygWin Windows中开发linux程序

安装过程先安装CygWin:网上有教程,主要是安装boost gcc gdb安装VSCode后设置环境:https://blog.csdn.net/zjwengyidong/article/details/53789533遇到的问题输出端乱码可以在设置中将runInTerminal设为True,直接使用终端,原因猜测应该是cmd的编码和VSCode输出编码不一致导致乱码。VSCode运...

2018-10-25 13:05:43 6284 1

原创 muduo库分析——net篇(6)Buffer

参考MuduoManual为什么要有应用层Buffer?前面prependable是预留空间,有一些控制信息,比如说后面有多少字节,或者一些数据的校验码等等可以直接放在这里,而不需要重新分配空间进行内容复制,这是一种空间换时间的方法中间readable是可读的信息,表示这里的数据没有读取取出后面writable是可写的空间,表示这里的空间还没有数据写入在TcpConnection.h中可以看见有两...

2018-05-20 13:32:55 394

原创 muduo库分析——net篇(5)Tcp

已经总结了,TcpServer是一个控制器,维护了一个TcpConnection列表和一个AcceptorAcceptor作用是建立一个监听套接字,用来接受新的连接,并调用相关回调函数TcpConnection是拥有Socket和Channel两个成员,Socket用于监听相关连接数据,Channel用于事件管理TcpServer还有一个EventLoopThreadPool成员,这是事件分发到其...

2018-05-20 12:16:46 209

原创 muduo库分析——net篇(4)Socket相关

muduo将Socket中系统调用封装在sockets命名空间中,这是对socket各种操作的一种抽象socket本身的一些操作比如bind,accept等等单独抽象成一个socket类由于在linux下,有各种socket地址结构体,因此 还有专门的InetAddress地址器先看SocketsOps文件,这是socket底层操作的封装创建一个socketint sockets::createN...

2018-05-14 15:30:16 603

原创 muduo库分析——net篇(3)Timer定时器相关

定时器是基于EventLoop所有定时器都注册在一个定时器IO上,定时器IO在到达指定时间后发生可读事件,EventLoop读该链接并调用当前已过期的所有定时器的函数,这些函数都属于EventLoop中pendingFunctors_首先看定时器Timer:成员: const TimerCallback callback_;    //绑定的回调函数 Timestamp expiration...

2018-05-14 15:00:47 405

原创 muduo库分析——net篇(2)EpollPoller和PollPoller

    这两个类主要是对IO模型Epoll和Poll的一个封装,功能是调用Epoll和Poll相关系统函数,注册删除更新IO文件描述符,返回活动的通道。    Poller.h protected: typedef std::map<int, Channel*> ChannelMap; ChannelMap channels_; // fd,Channel 集合 pri...

2018-05-08 10:58:48 331

原创 muduo库分析——net篇(1)EventLoop

类图:可以看出大概的关系Channel负责注册删除和响应的IO事件,具有IO当前状态,持有相关的回调函数EventLoop具有事件循环能力,从Poller中不停的读取IO事件,反馈到Channel上,执行Channel的回调函数Poller持有Channel的map结构,形式为<int fd,Channel*>,其派生类会新增相关文件描述符集合(用于从系统调用中读取相关IO事件)Eve...

2018-05-08 09:50:40 263

原创 muduo库分析——base篇(9)日志

首先是日志等级:Muduo中Logger是全局日志控制器,其调用过程如下Logger封装了impl资源类,Implement里面有stream对象,重载了<<符号,调用时将其Buffer资源进行数据整合,Logger析构时,获得stream中的buffer中的data数据,将数据填充到g_output函数中进行回调。logging.h 和logging.c class SourceFi...

2018-05-07 15:33:19 284

原创 muduo库分析——base篇(8)ThreadLocal

TLS可以不同线程调用相同函数(相同的参数)获得不同的值即使pkey[1]都是一样的,但是指向的内存数据不一样 T& value()    //获得值的引用 { T* perThreadValue = static_cast<T*>(pthread_getspecific(pkey_));    //通过getspecific获得储存的值的指针 if (!p...

2018-05-07 15:16:25 163

原创 muduo库分析——base篇(7)ThreadPool

线程池用于创建线程,添加任务后,空闲线程会取出任务并执行 void setMaxQueueSize(int maxSize) { maxQueueSize_ = maxSize; } //设置队列长度 void setThreadInitCallback(const Task& cb) //设置线程初始化回调函数void run(const Task& f); //执行线程函...

2018-05-07 14:59:17 247

原创 muduo库分析——base篇(6)BlockingQueue 和 BounderBlockingQueue

一个无界一个有界的生产者消费者队列无界用的数据结构是队列有界用的是环形缓冲区什么场景适合什么数据结构在注释中简单的写了一点,更多的可以百度无界用了一个条件变量,生产者生产后利用条件变量通知队列不为空,消费者利用条件变量通知生产者队列为空应该生产并进行等待有界用了两个条件变量,因为多了一个条件就是队列满了后应该怎么做T take() //消费者只要有东西就消费void put(const T&amp...

2018-05-07 14:48:30 223 1

原创 muduo库分析——base篇(5) Condition

都是一些比较基础的东西,就不过多讲了 void wait() { MutexLock::UnassignGuard ug(mutex_); //wait时解除线程和锁的绑定 MCHECK(pthread_cond_wait(&pcond_, mutex_.getPthreadMutex())); }ETIMEDOUT == pthread_cond_timedwai...

2018-05-07 14:40:02 239

原创 muduo库分析——base篇(4) Mutex

为了方便开发,一般创建互斥量的管理类,同时创建上锁解锁类(RALL技术)class MutexLock : boost::noncopyable{ public: MutexLock() : holder_(0) //线程持有者 { MCHECK(pthread_mutex_init(&mutex_, NULL)); //mutex动态初始化 } ~M...

2018-05-07 14:37:27 223

原创 muduo库分析——base篇(4) Thread

线程管理对象,本身携带进程tid,需要执行的函数头文件: typedef boost::function<void ()> ThreadFunc; //无参数无返回线程函数 explicit Thread(const ThreadFunc&, const string& name = string()); //别名防止拷贝函数 CountDownLatc...

2018-05-07 14:26:46 344

原创 muduo库分析——base篇(3) Exception

Exception类用于异常数据的储存和获取头文件#ifndef MUDUO_BASE_EXCEPTION_H#define MUDUO_BASE_EXCEPTION_H#include <muduo/base/Types.h>#include <exception>namespace muduo{class Exception : public std:...

2018-05-07 14:17:42 212

原创 muduo库分析——base篇(2) Atomic

主要是封装了原子操作类,用于原子计数功能,使用的__sync_fetch_and_add等等系统函数都是特定cpu支持的命令namespace muduo{namespace detail{template<typename T>class AtomicIntegerT : boost::noncopyable{ public: AtomicIntegerT() ...

2018-05-07 14:13:21 254

原创 muduo库分析——base篇(1)

    开始专心于c++linux服务器开发,之前读过《深度探索c++对象模型》,《effective c++》,《linux网络多线程编程》,这几本书都是跳着看重点    现在开始分析陈硕大神的Muduo网络库,参考了b站的视频(原创c++网站)https://www.bilibili.com/video/av17761184/?p=10    base篇主要写源码的一些简单注释和简单的逻辑分析...

2018-05-07 14:06:52 273

原创 Android Kotlin开发问卷调查编辑器

使用Kotlin对Android进行问卷调查编辑器开发,使用了Recyclerview进行动态控件添加,总结一系列的坑,代码放在Github希望有需要的人点个星

2017-09-14 09:29:23 982

空空如也

空空如也

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

TA关注的人

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