C++ DirectX 10 IDXGISwapChain::GetBuffer多线程CTD错误

C++ DirectX 10 IDXGISwapChain::GetBuffer多线程CTD错误,c++,multithreading,visual-studio,directx-10,C++,Multithreading,Visual Studio,Directx 10,我正在尝试创建一个多线程程序,其中所有渲染都在主线程上完成,而消息处理(和窗口创建)则在辅助线程上完成。下面的代码行SwapChain->GetBuffer(0,uu-uuidof(ID3D10Texture2D),(void**)和back\u-buffer)会产生访问冲突错误(0xc0000005) 如何在不将初始化函数放在次线程上的情况下修复此错误 编辑:我已经发布了所有相关代码。在Application.cpp的第49行,while(HWindow!=nullptr)正在等待HWindo

我正在尝试创建一个多线程程序,其中所有渲染都在主线程上完成,而消息处理(和窗口创建)则在辅助线程上完成。下面的代码行
SwapChain->GetBuffer(0,uu-uuidof(ID3D10Texture2D),(void**)和back\u-buffer)会产生访问冲突错误(0xc0000005)

如何在不将初始化函数放在次线程上的情况下修复此错误


编辑:我已经发布了所有相关代码。

在Application.cpp的第49行,
while(HWindow!=nullptr)正在等待
HWindow
变成
nullptr
。但是HWindow被初始化为
nullptr
,因此while循环将跳过并尝试初始化尚未创建的窗口


该行现在读取
while(HWindow==nullptr)。这意味着循环将一直运行到创建窗口为止,从而阻止初始化不存在的窗口。

在Application.cpp的第49行,
while(HWindow!=nullptr)正在等待
HWindow
变成
nullptr
。但是HWindow被初始化为
nullptr
,因此while循环将跳过并尝试初始化尚未创建的窗口


该行现在读取
while(HWindow==nullptr)。这意味着循环将一直运行到创建窗口为止,从而阻止对不存在的窗口进行初始化。

除非您提供或至少提供初始化部分,否则无法猜测到底出了什么问题。使用单独呈现线程的方法可以工作(甚至是首选),但应特别注意处理可能的死锁并防止对DXGI方法的并发调用。我已将链接放在包含所有相关代码的GitHub存储库中。您的代码缺少错误处理。您必须检查所有HRESULT返回值,并检查DX调用是否确实成功。在崩溃的代码行中,错误处理被证明是无用的。然而,VisualStudio调试器告诉我SwapChain是nullptr。因此,我在前一行上做了一个错误检查,它为
D3D10CreateDevice和SwapChain
记录了“-2005270527”。除非您提供或至少提供初始化部分,否则无法猜测到底出了什么问题。使用单独呈现线程的方法可以工作(甚至是首选),但应特别注意处理可能的死锁并防止对DXGI方法的并发调用。我已将链接放在包含所有相关代码的GitHub存储库中。您的代码缺少错误处理。您必须检查所有HRESULT返回值,并检查DX调用是否确实成功。在崩溃的代码行中,错误处理被证明是无用的。然而,VisualStudio调试器告诉我SwapChain是nullptr。因此,我在前一行上做了一个错误检查,它记录了D3D10CreateDevice和SwapChain的“-2005270527”。