200分 求DELPHI 7 TImage 调用 .Canvas.Draw时 Out of system resources DEBUG 本帖最后由 mopishv0 于 2010-12-17 23:27:22 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是不是某些gif图片的问题?我以前录制的一个软件操作演示的gif,在ie里播放都会导致内存占用剧增 gifFinish是怎么取值的?每次系统启动时取一次还是每次用之前去一次? imgBG.Canvas.Draw(imgRun.Left, imgRun.Top, gifFinish);利用try except end结构,确定在异常发生时,imgRun.Left, imgRun.Top这2个值到底是多少有时候多线程下,delphi会出现出人意料的问题 doublebuffer:=true试试,不过估计没有什么作用,错误提示内容是“系统资源不够”,估计是有什么东西一直在创建,而没有释放做成的 绘制完成后,加载下一次绘图时记得释放前个图片由于绘制是bmp保存图片信息 所以相对比较大可能会比较占内存 这个应该不是问题所在如果是位置不对的话应当每次都会出现问题的left是个固定值而且出问题时 TOP值还在正常范围内 imgBG.Canvas.Lock;try imgBG.Canvas.Draw(imgRun.Left, imgRun.Top, gifFinish);finally imgBG.Canvas.UnLock;end;这样应该能解决.因为Canvas不是线程安全的,需要锁定后操作 恩 这个办法用过了 主要BUG太难重现 需要知道 BUG的根本原因 然后找到重现的方法 才能证明这样确实是对的谢谢 哈哈,我找到了问题出在delphi本身在delphi中, try lock; 程序段 finally unlock; end结构,在程序段中出现超出范围错时,并不能保证会准确的执行finally段的unlock指令,造成资源被锁定 try lock; try 程序段 except 标记 end; finally unlock; end 可以通过以上方式验证,在标记处下断点 其实,通过上面的方式,跑飞的代码已经被except强行拉回,已经可以初步解决Out of system resources, 为严谨起见,最好还是彻底解决 程序段 中存在的隐患为佳 以上是我自己解决的办法,在我的程序中已经确证,希望你有用 至于重现bug的方式,我是开了30个以上的线程同时操作相同的代码段,在except中下断点 如果在程序中没有使用lock 与unlock出现这样的问题呢?如何解决 必须使用lock 与unlock吧否则多线程时会有问题 灰色的按钮,就是Disable掉的那种按钮的句柄怎么获取? 寻一sql语句 300分求答案 在线等 用rave做报表,打包时需要哪些文件(急) 一个简单的问题 急急急,菜鸟字符串问题,在线等待 创建立SQLServer数据库,用哪种办法好? 请教关于词典的设计问题 有哪位大侠知道微软的CHM文件的格式,或是有它的开发包,急,急,急!!! 关于主从表的问题!请教各位大侠。 为什么字符串长度不一样??? 请教关于Delphi2010中字符长度的问题
有时候多线程下,delphi会出现出人意料的问题
如果是位置不对的话应当每次都会出现问题的
left是个固定值
而且出问题时 TOP值还在正常范围内
try
imgBG.Canvas.Draw(imgRun.Left, imgRun.Top, gifFinish);
finally
imgBG.Canvas.UnLock;
end;
这样应该能解决.因为Canvas不是线程安全的,需要锁定后操作
主要BUG太难重现 需要知道 BUG的根本原因 然后找到重现的方法 才能证明这样确实是对的
谢谢
问题出在delphi本身
在delphi中,
try
lock;
程序段
finally
unlock;
end
结构,在程序段中出现超出范围错时,并不能保证会准确的执行finally段的unlock指令,造成资源被锁定
try
lock;
try
程序段
except
标记
end;
finally
unlock;
end
可以通过以上方式验证,在标记处下断点
其实,通过上面的方式,跑飞的代码已经被except强行拉回,已经可以初步解决Out of system resources, 为严谨起见,最好还是彻底解决 程序段 中存在的隐患为佳 以上是我自己解决的办法,在我的程序中已经确证,希望你有用
必须使用lock 与unlock吧
否则多线程时会有问题