社区
VCL组件使用和开发
帖子详情
TBitmap是不是线程安全的?
MySunGod
2008-10-14 10:04:03
我看手册说是安全的,但是我在线程内循环使用一个Bitmap时,一段时间后就会在Bitmap->Width = xxxx;或者Bitmap->SaveToStream时出错,错误信息是EoutofResources
即使在循环内创建Bitmap用完删掉还是会在一段时间后出现同样的错误.......
在bcb2007 2009下都有这个问题。
我就想知道,Bitmap到底能不能在线程里面使用.......
我要疯了!!!!!!
代码太多太乱我就不上了......
...全文
269
9
打赏
收藏
TBitmap是不是线程安全的?
我看手册说是安全的,但是我在线程内循环使用一个Bitmap时,一段时间后就会在Bitmap->Width = xxxx;或者Bitmap->SaveToStream时出错,错误信息是EoutofResources 即使在循环内创建Bitmap用完删掉还是会在一段时间后出现同样的错误....... 在bcb2007 2009下都有这个问题。 我就想知道,Bitmap到底能不能在线程里面使用....... 我要疯了!!!!!! 代码太多太乱我就不上了......
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
僵哥
2008-10-15
打赏
举报
回复
建议检查一下其它的代码,包括关联于TBitmap的联动代码,如果TBitmap不涉及UI的话,那很极大可能是内存错乱导致的问题.
MySunGod
2008-10-15
打赏
举报
回复
[Quote=引用 3 楼 akirya 的回复:]
刚才看了一下代码,没看到有线程同步的东西在里面
[/Quote]
我只有一个线程在跑,不存在同步的问题.........我就怒了
MySunGod
2008-10-15
打赏
举报
回复
是Bitmap导致的GDI错误,和GUI没有关系,我很颓............
MySunGod
2008-10-15
打赏
举报
回复
是Bitmap导致的GDI错误,和GUI没有关系,我很颓............
yumikoo
2008-10-15
打赏
举报
回复
Bitmap类型的任何公共静态成员都是线程安全的,但不保证所有实例成员都是线程安全的。
Bitmap本来是封装GDI和位图的,你如果出现GUI问题,的确有点莫名其妙。但也不是无从查询。仔细检查使用过程中的内存变化。很多时候,由GUI和位图出现的问题基本都和内存有关。
TripH0101
2008-10-15
打赏
举报
回复
MARK
珍惜生命远离CPP
2008-10-14
打赏
举报
回复
刚才看了一下代码,没看到有线程同步的东西在里面
MySunGod
2008-10-14
打赏
举报
回复
[Quote=引用 1 楼 yumikoo 的回复:]
线程里使用Canvas是需要反复的去Canvas->Lock()和Canvas->Unlock()来实现写和读的。否则会造成资源问题。
[/Quote]
使用Canvas的部分都加锁了的,但是却遇上这该死的GDI错误............bitmap所占用的GDI空间不能被释放........导致最后没有空间可用
codeguard也侦测这种没有被释放的情况
我程序的架构都已经定好了,对bitmap的操作必须跑在线程里面,而是是acitveform程序,没有Synchronize可用........
怒啊!!!!
yumikoo
2008-10-14
打赏
举报
回复
线程里使用Canvas是需要反复的去Canvas->Lock()和Canvas->Unlock()来实现写和读的。否则会造成资源问题。
关于对T
Bitmap
的Canvas操作发生Out of system Resource异常
今天做代码,发现在线程里面操作老是提示“Out of system Resource”错误,代码如下: if ARect.Right - ARect.Left = 0 then F
Bitmap
.Canvas.StretchDraw(F
Bitmap
.Canvas.ClipRect, A
Bitmap
) else F
Bitmap
.Canvas.CopyRe
看资料得知t
bitmap
,image,tjpegimage等都不是
线程安全
的,那么如何后台开一个线程打开N个图片并且显示在某个scrollbox中呢?...
看资料得知t
bitmap
,image,tjpegimage等都不是
线程安全
的,那么如何后台开一个线程打开N个图片并且显示在某个scrollbox中呢? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiBase/html/delphi_20061215012308149.html 经过多次试验,总是莫名奇妙出错,我想原因可能就是这个...
Delphi经典8大天坑|第八篇:T
Bitmap
跨线程使用,导致GDI泄漏/崩溃/画面花掉
在多线程程序中,用T
Bitmap
进行绘图、图片处理(如在子线程中绘制图像、修改
Bitmap
像素),程序运行一段时间后,出现画面花掉、控件闪烁、GDI对象泄漏(任务管理器中GDI对象数持续增加),甚至崩溃报错,且问题在高并发、长时间运行后更明显。核心原则:GDI对象(T
Bitmap
)**线程隔离+同步**,子线程使用自己创建的GDI对象,避免直接操作主线程的GDI对象;1. 子线程使用GDI对象(T
Bitmap
、TCanvas等),必须自己创建、自己释放,不引用主线程的GDI对象;// 同步到主线程显示。
泛型,存放N张图片
(* ************************************************* 1、里面放多张图片,用文件名作为索引 2、线程在背后从硬盘加载到内存 3、批量加载 4、加载完成后执行回调,回调是
线程安全
的 5、回调中的参数是新加载了多少张图片 **********************************************...
VCL组件使用和开发
604
社区成员
13,456
社区内容
发帖
与我相关
我的任务
VCL组件使用和开发
C++ Builder VCL组件使用和开发
复制链接
扫一扫
分享
社区描述
C++ Builder VCL组件使用和开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章