1

我遇到了一个奇怪的问题,我认为D3D11CreateDeviceAndSwapChain我可以创建设备和交换链,但是当应用程序退出并->destroy在交换链、设备和设备上下文上被调用时,线程仍在运行。注释掉这一行,应用程序将按预期终止。

featureLevel = D3D_FEATURE_LEVEL_11_0;
result = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, &featureLevel, 1, D3D11_SDK_VERSION, &swapChainDesc, &m_swapChain, &m_device, NULL, &m_deviceContext);

if(FAILED(result))
{
#ifdef _DEBUG
    log(logDEBUG) << "Error at D3D11CreateDeviceAndSwapChain";
#endif
    return false;
}
return true;

和破坏:

if(m_swapChain)
{
    m_swapChain->SetFullscreenState(false, NULL);
}

if(m_device)
{
    m_device->Release();
}

if(m_deviceContext)
{
    m_deviceContext->Release();
}

if(m_swapChain)
{
    m_swapChain->Release();
}

我相当有信心问题来自于此,但我不是 100% 确定。单步执行代码,我看到每个版本都被正确调用。(如果第一个块被注释掉,应用程序将正确关闭。)

感谢您提供有关此问题的任何见解。

4

2 回答 2

1

我不完全确定我做了什么,但我设法解决了这个问题。我正在清理不同部分的代码,突然间一切都开始正常关闭。

我感觉我没有正确设置或关闭窗口。

于 2012-09-22T20:50:02.143 回答
0

因为交换链持有对设备上下文的引用,而设备上下文持有对设备的引用,所以问题可能与调用的顺序有关。尝试先释放交换链,然后 - 设备上下文,然后是设备本身。

于 2012-09-21T22:11:00.017 回答