游戏开发论坛

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: 游侠无极限

为什么处理游戏循环一定要放在Windows消息循环里?

[复制链接]

2

主题

177

帖子

177

积分

注册会员

Rank: 2

积分
177
发表于 2005-7-25 09:52:00 | 显示全部楼层

Re: Re:为什么处理游戏循环一定要放在Windows消息循环里?

silekey: Re:为什么处理游戏循环一定要放在Windows消息循环里?

...
最后,我再强调一下。多线程不是在任何情况下都能起到加速的作用。相反,它本身的实现就会消耗一定CPU资源


线程切换有较大消耗只存在于单CPU机器上,并且在非常频繁地切换时才会有影响,多CPU上只要同步做好,并不存在切换耗时的问题

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-7-25 10:23:00 | 显示全部楼层

Re: 为什么处理游戏循环一定要放在Windows消息循环里?


拜托大家看清楚,我说的也应该很清楚了,这里就2个线程,一个窗口的,一个游戏的,对全屏游戏来说,就相当于单线程了,但是对于窗口模式运行的就不同,一个窗口模式运行的游戏,如果使用的是完全的单线程,那么很显然,在进行窗口调整,拖动的时候,游戏的渲染部分会被搁置,因为消息循环忙于处理窗口消息,基本没有时间空闲!我要说的就是这个问题,我是一个喜欢窗口模式游戏的人

----------------------------------------------------------------------------

你的问题可以用2个线程试一试,不过你会发现十分的别扭,而且会出错,因为游戏本身就是窗口相关的,你可以想象,你的窗口位置在一个线程中不断改变(窗口线程),还有一个线程在不断的往窗口上绘制东西(游戏线程),二者谁来协调,道理一样的,窗口本身就是游戏的一部分,而且我不觉得窗口拖动的时候游戏暂停有什么问题。

还有一个问题就是,你会发现如果用2个线程,当你切换窗口时,如果你的游戏窗口失去焦点,那么游戏线程的CPU占用率将会大大提升。

总之一点就是你会碰到很多你意想不到的问题,如果你能解决,那么也没什么不可以的,还是提醒一下,DX的线程安全是很脆弱的,死机兰屏不要感到奇怪。




----------------------------------------------------------------------------

没问题的,线程处理游戏数据,像在网游里面,有很多线程在处理连接池和游戏中的数据,不过线程调试的确麻烦一点,特别在线程处理GDI,数据库接口时
----------------------------------------------------------------------------

这是两码事,我都不明白在说什么,一会连接池,一会GDI,一会又数据库。

服务器端的数据量再大都是简单数据,类型少,可控,客户端的数据都是big block memory的数据,而且都是系统相关的,能比吗?

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-7-25 10:27:00 | 显示全部楼层

Re:为什么处理游戏循环一定要放在Windows消息循环里?

更重要的是服务器的数据碰撞机会是和人的交互有关,即使有冲突也可以排队,比如大量连接涌入,而客户端图形界面一秒之内几十上百帧,线程数据碰撞的几率是很大的,也不允许你有太多的时间排队。

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-7-26 18:01:00 | 显示全部楼层

Re: 为什么处理游戏循环一定要放在Windows消息循环里?

游侠无极限: 为什么处理游戏循环一定要放在Windows消息循环里?

我不知道为什么所有的游戏教程都会告诉你,要用PeekMessage,这样可以在OnIdle里处理游戏部分
我觉得这个十...

下列几种情况值得试一下多线程:
1.系统有多个CPU. 如果只有一个CPU, 为了使用多线程而用多线程,那毫无意义,反而会由于线程切换、临界区加锁而产生不必要的开销。
2.有单个CPU.  但采用单线程时,有阻塞操作而无法避免. 比如读文件载图或者非要用阻塞网络IO. (在异步IO库没有实现的情况下,只好新开个线程,防止在IO等待上白白浪费CPU)
3.使用了第三方库,这个库有一些资源上的限制等等。

多线程并不一定比单线程高效,要看具体情况。很多情况下采用多线程是得不偿失。

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2005-7-26 20:51:00 | 显示全部楼层

Re: Re:为什么处理游戏循环一定要放在Windows消息循环里?

silekey: Re:为什么处理游戏循环一定要放在Windows消息循环里?

大家可不能再停留在DOS时的想法啦:)

…………
是不是dos时代不重要,重要的是——游戏是很吃资源的
不信的话开着bt再去玩doom3就知道了。

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2005-7-26 20:56:00 | 显示全部楼层

Re: Re:为什么处理游戏循环一定要放在Windows消息循环里?

游侠无极限: Re:为什么处理游戏循环一定要放在Windows消息循环里?
在进行窗口调整,拖动的时候,游戏的渲染部分会被搁置,因为消息循环忙于处理窗口消息,基本没有时间空闲!

你很牛气!一边调整窗口一边玩游戏??
不要只从开发者角度去看问题,多从玩家方面想一想!

还有,就算是双核心cpu好了,把两个核心一个分配与碰撞检测一个分配与ai处理是更合适的,非要给窗口再划出来一个,纯粹是画蛇添足。

16

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2005-7-26 21:47:00 | 显示全部楼层

Re:为什么处理游戏循环一定要放在Windows消息循环里?

开发单机游戏不用多线程也可以的,做网络游戏再用多线程。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-26 15:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表