Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 关于在线程中调用CreateDIBSection_Multithreading_Createdibsection - Fatal编程技术网

Multithreading 关于在线程中调用CreateDIBSection

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

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

不太可能是内存不足错误

CreateDibSection需要一个HDC,你从哪里得到的?是不是另一根线拿到了,然后递给你

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


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

不太可能是内存不足错误

CreateDibSection需要一个HDC,你从哪里得到的?是不是另一根线拿到了,然后递给你

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


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

您的故障意味着您没有删除Hdc 在CreateDIBSection之前,必须删除新的Hdc。 但是怎么做!什么是新的HDC 在更改之前,先获取旧的Hdc

在CreateDIBSection之后,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
hDib=CreateDIBSection(hDCRef、bi、DIB_RGB_颜色、lPtr、0、0)
如果(hDib=0),则删除对象hdc
如果为(hDib 0),则hBmpOld=SelectObject(hdc,hDib)“”已创建,无需删除

您的故障意味着您没有删除Hdc 在CreateDIBSection之前,必须删除新的Hdc。 但是怎么做!什么是新的HDC 在更改之前,先获取旧的Hdc

在CreateDIBSection之后,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
hDib=CreateDIBSection(hDCRef、bi、DIB_RGB_颜色、lPtr、0、0)
如果(hDib=0),则删除对象hdc
如果为(hDib 0),则hBmpOld=SelectObject(hdc,hDib)“”已创建,无需删除

i使用hdcTemp=CreateCompatibleDC(GetDC(0))获取hdc,然后CreateDibSection将被称为hbmpTemp=CreateDibSection(hdcTemp,&bi,DIB_RGB_COLORS,(void**)&pBits,0,0);正如您所说,mycolleague还发现,在没有任何同步的情况下,HDC的使用是错误的。他认为我应该在线程中使用内存dc。现在我有点了解这个问题了,谢谢你的帮助John Knoler。我用hdcTemp=CreateCompatibleDC(GetDC(0))获得hdc,然后CreateDibSection将被称为hbmpTemp=CreateDibSection(hdcTemp,&bi,DIB_RGB_COLORS,(void**)&pBits,0,0);正如您所说,mycolleague还发现,在没有任何同步的情况下,HDC的使用是错误的。他认为我应该在线程中使用内存dc。现在我有点明白这个问题了,谢谢你的帮助约翰·克诺勒。