设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 游戏开发 >> 《Windows游戏编程大师技巧》(第二版)第11章
精品推荐
游戏开发点击TOP10
·DirectX5.0最新游戏编程指南 DirectDraw教程篇 二、第一个DirectDraw实例
·用Excel编写小游戏
·五子棋的原代码
·游戏开发方面相关的电子书下载
·游戏文件系统的解决方案
·基于LOD的大规模真实感室外场景实时渲染技术的初步研究 part II&III
·用MFC构造DirectX应用框架
·游戏开发开门
·《Windows游戏编程大师技巧》(第二版)第11章
·DirectX8.1的DirectDraw7研究手记(三)
编程开发点击TOP10
·数字小键盘指法练习
·ASP.NET 程序中常用的三十三种代码
·用C语言编通讯录程序(初学者级别的)
·我写的Java学生成绩管理系统源代码
·CHK文件恢复工具
·Modem 常用AT指令集
·java笔试题
·异常java.sql.SQLException: Io exception:The Network Adapter could not establish connection
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
精选专题

《Windows游戏编程大师技巧》(第二版)第11章

作者: 来源:网络文章 时间:2005-12-17 22:39:07

《Windows游戏编程大师技巧》(第二版)第11章(21) 为何要在游戏中使用线程?
现在这个答案是非常明显的了。事实上,我想你随时都可以列出1000件可以用线程来做的事情。然而,假如你无法做到这一点(比如你刚刚从Mountain Dew(或Sobe,我最近爱上了它)的宿醉中醒过来),下面我列出一些用到多线程编程的地方:
• 更新动画
• 产生环绕音响效果
• 控制小对象
• 查询输入设备
• 更新全局数据结构
• 创建弹出菜单和控件
上述最后一项是我经常使用的。在游戏正在运行的时候创建菜单并允许玩家改变设置,这一直是令人头疼的事。但是用线程处理起来就简单多了。
到目前为止,我依然没有回答为什么要在游戏编程中使用线程而不使用一个庞大循环和函数调用这个问题。的确,线程完成的工作它们也能完成,但当你所创建的面向对象的程序越来越大,达到一定程度时,你就需要提出类似于自动机(Automaton)的结构。这些便是代表游戏角色的对象——你希望在创建和销毁的时候对游戏主循环没有逻辑副作用。这可以通过C++类并结合多线程编程来实现。
在开始你的第一个多线程程序前,让我们搞清楚一下事实:在单处理器机器上,一次只能运行一个线程。所以天下并没有免费的午餐,但毕竟这是适应软件的方法学,因此确保你是为了简便性和正确性而进行多线程编程。图11-17表示了一个主进程和三个线程同时执行的情况。
图11-17:主进程产生三个子线程
 
图中的时间表明了不同的线程对处理器的占用时间,单位是毫秒。如你所见,一次只有一个线程在运行,但它们可以打乱顺序运行,并根据优先级高低来确定运行时间。
前戏足够了。让我们看一些代码吧!
取得一个线程
在下面的例子中,你将使用控制台模式程序。再次强调,请正确地编译这些程序。(我已不堪多言,因为我每小时要收到30~60封来自我写的几本书的读者的有关错误使用VC++编译器的电子邮件。难道就没有人读前言吗?)
还有一条告诫是:对于这些例子,你必须使用支持多线程的库(Multithreaded Library)。进入MS DEV Studio的主菜单,选择Project、Setting,在C++表栏的Category: Code Generatrion选项里,将Use Run-time Library设置为Multithreaded。如图11-18所示。此外,确保将优化(Optimization)选项设为off。因为有时候该选项会影响多线程同步代码,所以最好将其关掉以防不测。

图11-18:使用多线程库创建一个控制台应用程序
 
注意
我有一种似曾相识的感觉。真的是似曾相识吗?还是随机的假象?
如果你没有这种感觉,你就不会知道你没有的是什么,那样倒也无所谓。:)

一切就绪,让我们开始吧。创建一个线程很简单,而防止其被损坏才是困难的部分!Win32 API调用的格式如下:
 HANDLE CreateThread(
LPSECURITY_ATTRIBUTES  lpThreadAttributes,
        // pointer to thread security attributes
  DWord  dwStackSize,  // initial thread stack size, in bytes
  LPTHREAD_START_ROUTINE  lpStartAddress,
               // pointer to thread function
  LPVOID  lpParameter,      // argument for new thread
  DWORD  dwCreationFlags,   // creation flags

1.《Windows游戏编程大师技巧》(第二版)第11章(1)
2.《Windows游戏编程大师技巧》(第二版)第11章(2)
3.《Windows游戏编程大师技巧》(第二版)第11章(3)
4.《Windows游戏编程大师技巧》(第二版)第11章(4)
5.《Windows游戏编程大师技巧》(第二版)第11章(5)
6.《Windows游戏编程大师技巧》(第二版)第11章(6)
7.《Windows游戏编程大师技巧》(第二版)第11章(7)
8.《Windows游戏编程大师技巧》(第二版)第11章(8)
9.《Windows游戏编程大师技巧》(第二版)第11章(9)
10.《Windows游戏编程大师技巧》(第二版)第11章(10)
11.《Windows游戏编程大师技巧》(第二版)第11章(11)
12.《Windows游戏编程大师技巧》(第二版)第11章(12)
13.《Windows游戏编程大师技巧》(第二版)第11章(13)
14.《Windows游戏编程大师技巧》(第二版)第11章(14)
15.《Windows游戏编程大师技巧》(第二版)第11章(15)
16.《Windows游戏编程大师技巧》(第二版)第11章(16)
17.《Windows游戏编程大师技巧》(第二版)第11章(17)
18.《Windows游戏编程大师技巧》(第二版)第11章(18)
19.《Windows游戏编程大师技巧》(第二版)第11章(19)
20.《Windows游戏编程大师技巧》(第二版)第11章(20)
21.《Windows游戏编程大师技巧》(第二版)第11章(21)
22.《Windows游戏编程大师技巧》(第二版)第11章(22)
23.《Windows游戏编程大师技巧》(第二版)第11章(23)
24.《Windows游戏编程大师技巧》(第二版)第11章(24)
25.《Windows游戏编程大师技巧》(第二版)第11章(25)
26.《Windows游戏编程大师技巧》(第二版)第11章(26)
27.《Windows游戏编程大师技巧》(第二版)第11章(27)
28.《Windows游戏编程大师技巧》(第二版)第11章(28)
29.《Windows游戏编程大师技巧》(第二版)第11章(29)
30.《Windows游戏编程大师技巧》(第二版)第11章(30)
31.《Windows游戏编程大师技巧》(第二版)第11章(31)
32.《Windows游戏编程大师技巧》(第二版)第11章(32)
33.《Windows游戏编程大师技巧》(第二版)第11章(33)
34.《Windows游戏编程大师技巧》(第二版)第11章(34)
35.《Windows游戏编程大师技巧》(第二版)第11章(35)
36.《Windows游戏编程大师技巧》(第二版)第11章(36)
37.《Windows游戏编程大师技巧》(第二版)第11章(37)
38.《Windows游戏编程大师技巧》(第二版)第11章(38)
共38页 9 7 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [388 :>

《Windows游戏编程大师技巧》(第二版)第11章 相关文章:
《Windows游戏编程大师技巧》(第二版)第11章 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com