首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于线程中的CreateDIBSection调用

关于线程中的CreateDIBSection调用
EN

Stack Overflow用户
提问于 2009-12-29 09:58:41
回答 2查看 567关注 0票数 1

在一个名为buildtexture的函数中,它加载了图像并为OpenGL构建纹理,当我调用CreateDIBSection时,它将创建一个位图。如果将函数buildtexture作为普通成员函数调用,则不会出现任何错误。但是如果我在线程中调用这个成员函数,CreateDIBSection将返回0,这意味着它失败了。在调用CreateDIBSection之后,甚至GetLastError也返回0。我猜线程没有足够的空间来创建位图。我不知道如何解决这个问题。有谁能帮我吗?非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2009-12-29 10:04:08

不太可能是内存不足错误。

CreateDibSection需要一个HDC,你从哪里弄到的?是不是另一个线程拿到了它,然后把它交给了你?

在线程中使用DC是合法的,而不是在获取它的线程中。但是当您在多个线程中使用DC时,您需要确保DC的使用是序列化的。

确保DC在您尝试使用它时仍然有效,并且一次只有一个线程尝试使用它。

票数 1
EN

Stack Overflow用户

发布于 2010-01-22 23:00:35

您错误是指在CreateDIBSection必须删除新的Hdc之前,您没有删除Hdc。但是怎么做呢!什么是新的HDC来了,在更换之前先拿到旧的Hdc即可。

在第一次CreateDIBSection后,Hdc会在每次调整窗体大小时改变大小,关闭窗体并最小化窗体

如果CreateDIBSectio返回0,则会删除大量Hdc

代码语言:javascript
复制
hDib = CreateDIBSection(hDCRef, bi, DIB_RGB_COLORS, lPtr, 0, 0)
if (hDib = 0) then DeleteObject hdc
if (hDib <> 0) then hBmpOld = SelectObject(hdc, hDib) 'already create not need to delete
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1972547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档