游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2009|回复: 8

学游戏编程时,有个不懂得问题请教一下

[复制链接]

77

主题

203

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
发表于 2005-1-26 11:56:00 | 显示全部楼层 |阅读模式
我学directdraw时,碰到了对绘图页或缓冲区直接存取用Lock()函数加锁的问题,主要是为了防止其他程序对其进行写操作,可我教程上介绍的很笼统,我对加锁的概念不太理解。
主要有以下两点:
1:为什么直接存取要加锁,而用blt(),bltfast()函数时不用加锁??
2:还有,其他程序改变了该内存块的数据,在其他程序(进程)结束后,该程序重新运行时,应该有恢复机制恢复此内存块的数据,那么,这Lock()函数是不是有点多余?这好象是操作系统有关的问题啊!
希望好心的大哥详细的讲解一下,先说声谢谢了!

63

主题

871

帖子

891

积分

高级会员

Rank: 4

积分
891
QQ
发表于 2005-1-26 13:10:00 | 显示全部楼层

Re:学游戏编程时,有个不懂得问题请教一下

blt(),bltfast()函数里可能有类是的功能

加锁可能跟临界区差不多,,lock后只有一个程序科写

其她要等到unlock后拆可以(出临界区)

77

主题

203

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2005-1-26 15:28:00 | 显示全部楼层

Re: 学游戏编程时,有个不懂得问题请教一下

多谢,临界区是什么东西?我还没学过操作系统呢,只是提前看了操作系统中的进程。

63

主题

871

帖子

891

积分

高级会员

Rank: 4

积分
891
QQ
发表于 2005-1-26 16:14:00 | 显示全部楼层

Re:学游戏编程时,有个不懂得问题请教一下

临界区是用在线程同步的,,一个线程进入临界区后其她的线程就被调住

这里的锁定和这个概念差不多,,是相通的

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-1-26 16:34:00 | 显示全部楼层

Re:学游戏编程时,有个不懂得问题请教一下

我猜测,被锁住的内容可能是压缩过的。
所以每会想访问内容之前都得按照一定格式来开锁。
我猜的啊,不一定对。
当然了,也是防止GPU和CPU在争用资源时发生冲突。

63

主题

871

帖子

891

积分

高级会员

Rank: 4

积分
891
QQ
发表于 2005-1-26 16:45:00 | 显示全部楼层

Re:学游戏编程时,有个不懂得问题请教一下

~!@#$%^&*()_+|\=-

有道理

星什么时候才会绿啊? [em4]

24

主题

229

帖子

229

积分

中级会员

Rank: 3Rank: 3

积分
229
发表于 2005-1-26 17:55:00 | 显示全部楼层

Re:学游戏编程时,有个不懂得问题请教一下

这个应该只有微软知道吧,我们学习记住就行了。
windows就是规矩太多。不过也值

13

主题

153

帖子

153

积分

注册会员

Rank: 2

积分
153
QQ
发表于 2005-1-27 00:19:00 | 显示全部楼层

Re:学游戏编程时,有个不懂得问题请教一下

我觉得,lock是为了让程序独占某块显存或内存,防止两个进程或者线程同时访问,造成数据混乱。而 blt、bltfast 是硬件支持的位块传输,同时只能做1次,不会出现同时blt的问题,所以不用lock.

77

主题

203

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
 楼主| 发表于 2005-1-27 11:13:00 | 显示全部楼层

Re: 学游戏编程时,有个不懂得问题请教一下

我昨晚看了操作系统,对临界区加锁,主要是为了防止引起数据操作错误,不过,如果是幕后暂存区,不知道会有哪两个或两个以上进程或者线程同时访问此块内存或显存?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-24 05:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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