1

我有一些要在第二个线程中运行的 directx 代码。我阅读了以下如何在 Direct3D9 中使用多线程设备运行?这表示只要您不从多个线程同时使用,就可以从其他线程使用 directx 设备,而我没有这样做。并且您必须从同一个线程调用 CreateDevice 和 CreateWindow,以及其他一些函数,如 TestCooperativeLevel、Reset 等

我正在做以下事情:

  1. 在主线程中创建窗口和directx设备;

  2. 启动第二个线程并在那里进行渲染和更新,基本上:

    • 更新,
    • 开始场景,
    • 画,
    • 结束场景,
    • 当下;
  3. 我还关心从主线程调用 TestCooperativeLevel、Reset、pDevice->Release 和 pDirect3D->Release()。

问题

当我在调试模式下对其进行测试时,该代码正在运行。但它不在释放模式下,即渲染线程似乎一切正常,但我的主线程似乎被阻塞并且不处理消息,或者有时处理它们非常慢。如果只是评论对 Present 的调用,一切都很好(当然它不会在屏幕上绘制),即主线程是响应式的,第二个线程也在运行。Sooo,如果在主线程中创建窗口和设备,从其他线程调用 Present 时是否有问题?当我阅读以下多线程问题时,此类限制仅适用于 CreateDevice、TestCooperativeLevel 和 Release。

4

1 回答 1

4

当 Present 从与运行消息泵的线程不同的线程中调用时,可能会引入死锁。更多信息: 多线程和 DXGI

于 2012-07-02T18:28:14.977 回答