TBitmap是不是线程安全的?

MySunGod 2008-10-14 10:04:03
我看手册说是安全的,但是我在线程内循环使用一个Bitmap时,一段时间后就会在Bitmap->Width = xxxx;或者Bitmap->SaveToStream时出错,错误信息是EoutofResources

即使在循环内创建Bitmap用完删掉还是会在一段时间后出现同样的错误.......


在bcb2007 2009下都有这个问题。

我就想知道,Bitmap到底能不能在线程里面使用.......


我要疯了!!!!!!


代码太多太乱我就不上了......
...全文
260 9 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
刚才看了一下代码,没看到有线程同步的东西在里面
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()来实现写和读的。否则会造成资源问题。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧