【发布时间】:2017-04-26 02:22:37
【问题描述】:
我正在尝试创建一个多线程程序,其中所有渲染都在主线程上完成,而消息处理(和窗口创建)在辅助线程上完成。初始化函数中的以下代码行SwapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (void**)&back_buffer);在将初始化函数放在主线程时会产生访问冲突错误(0xc0000005)。
如何在不将初始化函数放在辅助线程上的情况下修复此错误?
编辑:我已经发布了所有相关代码here。
【问题讨论】:
-
除非您提供Minimal, Complete, and Verifiable example 或至少提供初始化部分,否则无法猜测到底出了什么问题。使用单独的渲染线程的方法可以工作(甚至是首选),但是应特别注意处理可能的死锁并防止并发调用 DXGI 方法。
-
我已经放置了一个指向包含所有相关代码的 GitHub 存储库的链接。
-
您的代码缺少错误处理。您必须检查所有 HRESULT 返回值并检查 DX 调用是否实际成功。
-
错误处理在崩溃的代码行上被证明是无用的。但是,Visual Studio 调试器告诉我 SwapChain 是 nullptr。所以我在前一行进行了错误检查,它为
D3D10CreateDeviceAndSwapChain记录了“-2005270527”。
标签: c++ multithreading visual-studio directx-10