第二人生的源码分析(四十四)虚拟文件系统的请求处理

在虚拟文件系统的消息队列里,主要就是LLVFSThread::Request类的请求,Request类是嵌套类,定义在LLVFSThread类里面。它主要实现对类LLVFS的封装访问,让操作更加方便一些,当然它是继续QueuedRequest类的,这样才可以添加到消息队列里去,否则不能添加到这个消息队列容器,也不能实现请求处理的多态了。

 

下面是类Request的构造函数。

#001 LLVFSThread::Request::Request(handle_t handle, U32 priority, U32 flags,

#002                                                  operation_t op, LLVFS* vfs,

#003                                                  const LLUUID &file_id, const LLAssetType::EType file_type,

#004                                                  U8* buffer, S32 offset, S32 numbytes) :

#005      QueuedRequest(handle, priority, flags),

#006      mOperation(op),

#007      mVFS(vfs),

#008      mFileID(file_id),

#009      mFileType(file_type),

#010      mBuffer(buffer),

#011      mOffset(offset),

#012      mBytes(numbytes),

#013      mBytesRead(0)

#014 {

#015      llassert(mBuffer);

#016 

 

判断是否非法出错。

#017      if (numbytes <= 0 && mOperation != FILE_RENAME)

#018 &n

时间: 2024-09-20 20:31:47

第二人生的源码分析(四十四)虚拟文件系统的请求处理的相关文章

第二人生的源码分析(四十三)虚拟文件系统线程

由于第二人生是一个3D显示的软件,因此它就需要不断地从服务器下载大量数据,比如纹理图片,不同的角色是使用不同的纹理图片来实现不同的衣服外表的.当显示这些角色时,就使用从服务器下载的纹理图片.如果显示的人物角色比较多,比如有30个人时,这些纹理图片就需要保存到磁盘里.那么怎么样保存到磁盘里呢?保存到磁盘里就需要一个好的文件系统来保存,以及读取数据出来.读写磁盘是一项比较慢的工作,因此需要使用一个线程来实现.还有时读写文件并不需要及时性的动作,可以让线程等到CPU空闲时再去做这些事情.   LLVF

hbase源码系列(十四)Compact和Split

先上一张图讲一下Compaction和Split的关系,这样会比较直观一些. Compaction把多个MemStore flush出来的StoreFile合并成一个文件,而Split则是把过大的文件Split成两个. 之前在Delete的时候,我们知道它其实并没有真正删除数据的,那总不能一直不删吧,下面我们就介绍一下它删除数据的过程,它就是Compaction. 在讲源码之前,先说一下它的分类和作用. Compaction主要起到如下几个作用: 1)合并文件 2)清除删除.过期.多余版本的数据

PHP网页游戏学习之Xnova(ogame)源码解读(十四)_php实例

十七.资源更新(PlanetResourceUpdate.php页面) 前面基本把重要的功能讲解完了,这章节我们分析重要的一个函数PlanetResourceUpdate,主要功能是更新资源.制造船舰和防御单位:代码很有条理,下面是详细的说明: 1.计算星球的最大存储空间,包括系统设置的浮动值 2.计算星球三种资源的产量和能量消耗总量,包括专家的加成 3.如果星球是月球,以上计算的产量和能量直接为0 4.计算上次更新资源到现在的时间 5.计算由于能量比率而引起的产量变化,能量为0的时候,只有基本

第二人生的源码分析(三十一)接收数据的流量控制

数据接收回来后,本来就应立即处理掉,这样是比较简单的想法.但由于网络带宽有限,这时就需要限制UDP接收数据的速度.下面就来分析这种需求的实现,它的代码如下: #001 S32 LLPacketRing::receivePacket (S32 socket, char *datap) #002 { #003      S32 packet_size = 0; #004    下面判断是否使用接收的流量限制. #005      // If using the throttle, simulate

jQuery 1.9.1源码分析系列(十四)之常用jQuery工具_jquery

为了给下一章分析动画处理做准备,先来看一下一些工具.其中队列工具在动画处理中被经常使用. jQuery.fn. queue(([ queueName ] [, newQueue ]) || ([ queueName ,] callback ))(获取或设置当前匹配元素上待执行的函数队列. 如果当前jQuery对象匹配多个元素:获取队列时,只获取第一个匹配元素上的队列:设置队列(替换队列.追加函数)时,则为每个匹配元素都分别进行设置.如果需要移除并执行队列中的第一个函数,请使用dequeue()函

OkHttp 3.7源码分析(四)——缓存策略

OkHttp3.7源码分析文章列表如下: OkHttp源码分析--整体架构 OkHttp源码分析--拦截器 OkHttp源码分析--任务队列 OkHttp源码分析--缓存策略 OkHttp源码分析--多路复用 合理地利用本地缓存可以有效地减少网络开销,减少响应延迟.HTTP报头也定义了很多与缓存有关的域来控制缓存.今天就来讲讲OkHttp中关于缓存部分的实现细节. 1. HTTP缓存策略 首先来了解下HTTP协议中缓存部分的相关域. 1.1 Expires 超时时间,一般用在服务器的respon

JUnit源码分析(四)——从Decorator模式说起

其实我这系列小文,名为源码分析,其实是自己读<设计模式>的读书笔记.Decorator模式在java的IO库中得到应用,java的IO库看起来复杂,其实理解了Decorator模式再回头看可以很好理解并使用.     Decorator模式,也就是装饰器模式,是对象结构型模式之一. 1.意图:动态地给一个对象添加一些额外的职责.给对象添加功能,我们首先想到的是继承,但是如果每增一个功能都需要继承,类的继承体系将无可避免地变的庞大和难以理解.面向对象设计的原则:优先使用组合,而非继承,继承的层次

jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween_jquery

在jQuery内部函数Animation中调用到了createTweens()来创建缓动动画组,创建完成后的结果为: 可以看到上面的缓动动画组有四个原子动画组成.每一个原子动画的信息都包含在里面了. 仔细查看createTweens函数,实际上就是遍历调用了tweeners ["*"]的数组中的函数(实际上就只有一个元素). function createTweens( animation, props ) { jQuery.each( props, function( prop, v

jQuery 1.9.1源码分析系列(十五)之动画处理_jquery

首先需要有队列(queue)的基本知识.见上一章. 相关教程:jQuery下的动画处理总结: http://www.jb51.net/article/42000.htm jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween  :http://www.jb51.net/article/75821.htm a.动画入口jQuery.fn.animate函数执行流程详解 ------------------------------------------------------