2017-04-26 142 views
1

我试图创建一个多线程程序,其中所有的渲染是在主线程上完成的,而消息处理(和窗口创建)是在辅助线程上完成的。初始化函数中的以下代码行SwapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (void**)&back_buffer);在初始化函数放置在主线程上时会产生访问冲突错误(0xc0000005)。DirectX 10 IDXGISwapChain :: GetBuffer多线程CTD错误

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

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

+0

除非您提供[最小,完整和可验证示例](https://stackoverflow.com/help/mcve)或至少初始化部分,否则无法猜测到底发生了什么错误。具有单独渲染线程的方法可以工作(甚至是首选),但应该特别小心处理可能的死锁并防止并发调用DXGI方法。 – VTT

+0

我已经把包含所有相关代码的GitHub存储库的链接。 –

+0

您的代码缺少错误处理。您必须检查所有HRESULT返回值并检查DX调用是否成功。 – VTT

回答

0

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

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