首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多线程IDirect3DDevice9::CreateDevice冻结

多线程IDirect3DDevice9::CreateDevice冻结
EN

Stack Overflow用户
提问于 2013-02-13 04:31:55
回答 1查看 495关注 0票数 0

我正在将我的渲染器移动到不同的线程。在这个过程中,我对IDirect3D9::CreateDevice进行了两次调用: 1.从“渲染线程”-为了创建一个渲染设备并适当地调整其大小2.从“主线程”-在这里我创建了一个空设备以便编译着色器等。

当然,这些调用可以重叠(同时进行),所以我将它们与CriticalSection同步。

问题是,这些调用中的一个有时会冻结。在这种情况发生之前,DirectX不会抛出任何警告,所以我怀疑是内部死锁。

我研究了文档,其中提到所有在单个设备上操作的调用,特别是IDirect3D9::CreateDevice、IDirect3DDevice9::TestCooperativeLevel和IDirect3DDevice9::Reset,都需要从同一个线程调用--但我已经介绍了这一点。

那么我错过了什么呢?有人能告诉我吗?

谢谢,帕克萨斯

EN

回答 1

Stack Overflow用户

发布于 2013-02-13 07:22:09

我对此只有一个模糊的记忆,但是:

  1. docs声明“任何创建、释放或重置设备的调用都必须使用与焦点窗口的窗口过程相同的线程来完成。”
  2. 据我所知,即使您尝试使用NULL硬件创建设备,Direct3D也会在内部为您的应用程序创建一个。

因此,你的一个线程肯定违反了第一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14841267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档