最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
第二人生的源码分析(四十三)虚拟文件系统线程
时间:2008-04-26 编辑:简简单单 来源:一聚教程网
由于第二人生是一个3D显示的软件,因此它就需要不断地从服务器下载大量数据,比如纹理图片,不同的角色是使用不同的纹理图片来实现不同的衣服外表的。当显示这些角色时,就使用从服务器下载的纹理图片。如果显示的人物角色比较多,比如有30个人时,这些纹理图片就需要保存到磁盘里。那么怎么样保存到磁盘里呢?保存到磁盘里就需要一个好的文件系统来保存,以及读取数据出来。读写磁盘是一项比较慢的工作,因此需要使用一个线程来实现。还有时读写文件并不需要及时性的动作,可以让线程等到CPU空闲时再去做这些事情。
LLVFSThread类是继承LLQueuedThread类,这样LLVFSThread就变成消息循环处理类了。只需要不断地添加请求到消息队列里,然后再实现消息处理函数,就实现相应的功能了。
#001 //static
#002 void LLVFSThread::initClass(bool local_is_threaded)
#003 {
#004 llassert(sLocal == NULL);
#005 sLocal = new LLVFSThread(local_is_threaded);
#006 }
上面实始化虚拟文件系统线程类。
#001 LLVFSThread::handle_t LLVFSThread::read(LLVFS* vfs, const LLUUID &file_id, const LLAssetType::EType file_type,
#002 U8* buffer, S32
#003 offset, S32 numbytes, U32 priority, U32 flags)
#004 {
获取处理的句柄。
#005 handle_t handle = generateHandle();
#006
获取这个请求的执行优先级。
#007 priority = llmax(priority, (U32)PRIORITY_LOW); // All reads are at least PRIORITY_LOW
创建读取数据请求消息。
#008 Request* req = new Request(handle, priority, flags, FILE_READ, vfs, file_id, file_type,
#009 buffer, offset, numbytes);
#010
添加这个消息到消息队列。
#011 bool res = addReq
相关文章
- C盘复制文件时提示错误代码0×80070522怎么办 12-02
- 文件不能复制粘贴怎么办 文件不能复制粘贴的解决方法 04-06
- td后缀文件是什么文件 如何打开td后缀的文件 04-02
- adb命令安装APK文件 01-15
- C盘能删除文件讲解 12-28
- pgf文件重要性介绍 12-20
热门栏目
-
php教程
php入门 php安全 php安装 php常用代码 php高级应用 -
asp.net教程
基础入门 .Net开发 C语言 VB.Net语言 WebService -
手机开发
安卓教程 ios7教程 Windows Phone Windows Mobile 手机常见问题 -
css教程
CSS入门 常用代码 经典案例 样式布局 高级应用 -
网页制作
设计基础 Dreamweaver Frontpage js教程 XNL/XSLT -
办公数码
word excel powerpoint 金山WPS 电脑新手 -
jsp教程
Application与Applet J2EE/EJB/服务器 J2ME开发 Java基础 Java技巧及代码