学习muduo(win平台的实现,未完成)
来源:互联网 发布:淘宝直播视频审核范本 编辑:程序博客网 时间:2024/06/04 18:53
代码在github:https://github.com/pei2017/muduo_exercise/tree/master/muduo_five/net
问题
1. __thread
__thread EventLoop* loopInThisThread = 0;用来判断当前的线程是否有已经创建了EventLoop对象。
__thread是一种线程局部存储(tls)机制,每个线程有一个该变量的实例。
windows平台下可以这样,__declspec(thread) EventLoop* loopInThisThread = 0;
2.WSAPoll相关的问题,莫名的bug?
http://blog.csdn.net/p2016/article/details/77719359
3.ssize_t
首先的话先看size_t,它是一个与机器相关的unsigned类型应为在32位系统为unsigned int,在64位系统中为 long unsigned int。
而ssize_t这个数据类型用来表示可以被执行读写操作的数据块的大小.它和size_t类似,但必需是signed.意即:它表示的是signed size_t类型的。
windows下,可以用intptr_t,其长度总是所在平台的位数,32位是int,64位是long long。
4.struct iovec和readv、writev
windows下以WSARecv和WSASend代替。
例如buffer类的readFd函数
intptr_t Buffer::readFd(int fd, int* savedErrno){ cout << "readFd() of Buffer " << endl; char extrabuf[65536]; WSABUF vec[2]; const size_t writable = writeableBytes(); vec[0].buf = begin() + writeIndex_; vec[0].len = writable; vec[1].buf = extrabuf; vec[1].len = sizeof extrabuf; // when there is enough space in this buffer, don't read into extrabuf. // when extrabuf is used, we read 128k-1 bytes at most. const int iovcnt = (writable < sizeof extrabuf) ? 2 : 1; DWORD n = 0;//count of received DWORD flag = 0; WSARecv(fd, vec, iovcnt, &n, &flag, NULL, NULL); if (n < 0) { *savedErrno = errno; } else if (n <= DWORD(writable)) { writeIndex_ += n; } else { writeIndex_ = buffer_.size(); append(extrabuf, n - writable); } return n;}
5.
windows下一些函数,inet_ntoa, inet_addr, InetPton, InetNtop.
后两个函数是新的接口,前两个也可以使用但是需要关闭编译器sdl检查。
6 还是WSAPoll
以条件变量解决 从EventLoop 的poll error;
因poll、WSAPoll的返回机制出现的问题。
http://blog.csdn.net/p2016/article/details/77842032
7 TimerQueue
http://blog.csdn.net/p2016/article/details/77809609
代码情况:
目前还剩余日志库。
另外,定时器和timestamp的实现可能会改变,其他部分代码也会修改为线程安全。
还会考虑将前置声明修改为#include。https://www.zhihu.com/question/63201378
- 学习muduo(win平台的实现,未完成)
- 学习muduo(类之间的函数调用,未完成)
- 学习muduo(主要类的介绍)
- 学习muduo(框架的设计)
- 【muduo库学习】实现最简单的reactor模式
- muduo网络库学习笔记(5):线程池的实现
- muduo网络库学习笔记(10):定时器的实现
- VC学习(未完成)
- muduo网络库学习(三)定时器TimerQueue的设计
- muduo源码学习(17)-定时器实现
- 扩展欧几里得的学习(未完成
- 学习 muduo。
- 未完成, (学习学长的处理年月日的方式)
- 平衡树实现(未完成)
- Java学习:容器(未完成)
- emacs学习笔记(未完成)
- redis学习总结(未完成)
- (未完成)Maven学习笔记
- ip的合法性判断
- vue.js简单实例
- jmeter之Sampler响应结果编码修改(解决乱码问题)
- 浅谈面向过程编程和面向对象编程
- 继承appcompatactivity 全屏
- 学习muduo(win平台的实现,未完成)
- web.xml详解(转)
- 表单校验与文件上传
- 深入理解JS闭包
- 学习笔记----COFF文件结构
- A. New Year Candles----模拟
- 针对分类问题的单隐层前馈神经网络模型
- 解决The SDK platform-tools version ((23)) is too old to check APIs compiled with API 23
- PAT-1078 Hashing (散列表 二次探测法)