关于在线程中调用CreateDIBSection

时间:2009-12-29 01:58:41

标签: multithreading createdibsection

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

2 个答案:

答案 0 :(得分:1)

不太可能出现内存不足错误。

CreateDibSection需要一个HDC,你从哪里得到它?有另一个线程得到它,然后交给你吗?

在获得它的线程之外的线程中使用DC是合法的。但是当你在多个线程中使用DC时,你需要确保DC的使用是序列化的。

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

答案 1 :(得分:0)

你有这个错误意味着你不能删除Hdc 在CreateDIBSection之前必须删除新的Hdc。 但是怎么样!什么是新的HDC来 刚刚获得旧的Hdc改变。

创建2DDIection后,Hdc会在非常时间调整大小形式,关闭表单 并最小化表格

如果CreateDIBSectio返回0 你要删除Hdc

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