经验浅薄,望乞前辈多多指点,下面是我的设计方案:
【overview】
主线程(Main) : 通过向子线程发送命令来实现全局调度D3D管理线程(Thread_D3D) : 管理d3d设备相关的对象操作。维护一段内存块(纹理内存块和声音内存块)IO线程(Thread_IO) : 负责资源加载和解析(纹理、声音),维护一段内存块,分配给所加载的资源【details】
[主线程]
1:创建win32窗口,维护Win32窗口消息2:维护UI的更新3:维护游戏主逻辑4:维护与脚本的交互[D3D管理线程]
1:负责D3D相关设备的初始化和释放2:负责加载/卸载纹理、声音等资源3:维护供纹理使用的一段内存块·首先预分配一定容量的纹理内存空间,比如100M,然后每加载一个纹理,便计数所占用的空间·当100M用完之后,便查找所有被标记为废弃的内存,然后从中取出一个使用,如果废弃的纹理空间总量达到一定程度则集中释放这些空间,若无废弃内存,则递增100M空间(比如一次增加50M)。以此循环往复4:维护供声音使用的内存块,实现方式同纹理[IO线程]
1:负责资源的加载和解析,如纹理、声音等资源2:维护一段内存块,供临时加载的纹理、声音等资源使用。实现方式同纹理【线程同步方案】
1:使用InterlockedExchange进行互斥2:[来源:GameRes.com]实现线程免锁,即所有线程对于外部数据只有读的权利,而没有写的权利,比如:
·D3D线程向IO线程发出加载纹理命令·IO线程将加载好的bmp数据指针传给D3D线程·D3D线程则用此指针将bmp数据lock到纹理中各位觉得这样设计,可以么?一般都是用的什么方案?