有谁能解决 Delphi 的这个 Bug?(200分)

  • 主题发起人 主题发起人 andin
  • 开始时间 开始时间
是啊,是资源泄露,我都测试过了,当然不是使用 SaveToFile 。连续执行 Canvas.TextOut
就可以出现问题,一般是 2 个中的一个:
A.无效句柄。句柄在 Create 时就建立了,怎么会无效?无效了那真实的那个哪里去了?
B.系统资源不够。这个是由于 Delphi 在堆内分配的缘故,暂时不好肯定是泄露。
那么怎么解决?偶有这个水平吗?当然是没有啦。
 
To : softdog
问题就怪异在这里,我用的也是上面的程序,在同一台计算机上,同一个操作系统下,有的时候3分钟之内就会出现 Out Of System Resource 异常,有的时候,几个小时都不会出现问题,不过,一个晚上,肯定要出现这个异常,想你所说的 2 天,都没有出现异常,比较奇怪,我用的 Windows 2000 Advanced Server,在Windows 2000 Server下,也有这个问题,另外,我用的是 Delphi5 + UpdatePack #1
 
To:dcshi2001
你也不要这么说吗,Borland 之所以把 VCL 源程序公开,一个重要的目的就是,如果有Bug,用户可以自己修改吗
 
可能你的机器慢一些吧!
 
To:wfzha
肯定与我的机器没有关系,因为,我在多个计算机上作过测试:
例如: 赛阳500、VIA 1G、Athlon 1400+、赛阳2G
都存在同样的问题


 
我用d7确实没问题
 
To:wfzha
用 D7 就没有这个问题了?!
我迫切需要解决这个问题,请你告诉上哪儿下载 D7?
 
TO:andin 没办法呀,老板要我写,而我要吃饭呀。等我先忙一阵。
 
和Delphi无关

原因是Windows释放文件需要时间。
 
突然想起我硬盘上改好了的Graphics.pa(注:Delphi3.0下的)

还有一点笔记:
-------------------------------------------------------------
Graphics.pas存在两处BUG:

错误发生在Delphi 3的图形处理文件Graphics中,Borland公司的开发人员锁住了BitmapCanvasList但是未解锁,使得程序在多线程的程序中会产生错误。

本文件夹内的Graphics.pas 和Graphics.dcu为修改后的两文件!
-------------------------------------------------------------
修改好的文件我已上传::
http://www.9daying.com/redsky/download/graphics.pas

具体改了哪些地方我也忘了。比较一下就知道了。
 
我也写了个几乎一样的程序,遇到了同样的问题,同时我还换过其他方法,如用DrawText,和使用API的TextOut,都失败了,关注ing
 
首先,TTest的Create和Destroy确实有错。对于Create,应该先执行基类的代码,而对于Destroy,应最后执行基类的代码,你正好搞反

第二,API的Delay()是挂起整个线程,如果外部发消息给该线程都会被阻塞,而用Application.ProcessMessage则会处理这些消息,所以一般情况下最好不要用Delay()

第三,我运行你的代码没有任何问题(Win2k3 Enterprise Chs + D7)
 
To:wfzha
Delphi7 下也有这个问题,我测试过!

 
To: MAGXJ500T
严格来说,Create、Destroy 函数确实应当按照你的说法来写,但也不是必须这么作,相反,我的做法体现了一些巧妙之处:
在 Create 函数内,最后调用 Inherited,好处在:在线程开始运行之前,FCurrentBitmap 对象已经建立好了,尽管是在主线程建立起来的,但是不会引起线程安全问题;
在 Destroy 函数内,最先调用 Inherited ,好处在:将线程停止下来,然后释放 FCurrentBitmap 对象,这样,绝对不会引起线程安全的问题;

如果按照传统的做法,程序就要多写一些代码,来解决线程安全的问题。
 
真是佩服你这种精神啊!不过,我觉得你始终没拿出有力的证据来。
你的代码在我这里确实没问题啊?我觉得真有bug的话,弄不好是windows的。
 
确实有这个BUG的。你会看到你机器的虚拟内存不断变大,最后被撑死。
 
To : wfzha
要说证据,直接证据,还没有;间接证据倒是不很少,你看这里有这么多人都发现了这个问题;而我为了检测这个问题,安装了 Delphi5、 Delphi6、 Delphi7,问题的现象都是一样。Delphi7 的 Graphics.pas 文件与 Delphi6 相比,没有大的差别,只是解决了一个关于 Mask 的 Bug。
 
眼睛要花了

帮你顶一下吧
 
听人劝,吃饱饭,我就再试一次,这一次,我把sleep(10)去掉了,看看行不行
我从7:40份开始运行......
 
与Delphi无关
与操作系统有关。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
897
SUNSTONE的Delphi笔记
S
后退
顶部