gpt4 book ai didi

c++ - Windows 在 WM_WINDOWPOSCHANGED 中挂起

转载 作者:可可西里 更新时间:2023-11-01 10:48:24 24 4
gpt4 key购买 nike

我有一个 DirectX9 应用程序偶尔会在 WM_WINDOWPOSCHANGED 中挂起。当 alt+tab 键进入和退出全屏独占模式时,挂起很少发生。

应用程序挂起是因为主窗口消息处理线程卡在 DefWindowProc 处理程序中的 WaitForSingleObject() 处。我们创建的其他线程运行正常。

卡住的主线程上的调用堆栈:

 ntdll.dll!_NtWaitForSingleObject@12()  + 0x15 bytes    
ntdll.dll!_NtWaitForSingleObject@12() + 0x15 bytes
kernel32.dll!_WaitForSingleObjectExImplementation@12() + 0x43 bytes
kernel32.dll!_WaitForSingleObject@8() + 0x12 bytes
d3d9.dll!WindowProc() + 0x27e95 bytes
user32.dll!_InternalCallWinProc@20() + 0x23 bytes
user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 bytes
user32.dll!_DispatchClientMessage@24() + 0x51 bytes
user32.dll!___fnDWORD@4() + 0x2b bytes
ntdll.dll!_KiUserCallbackDispatcher@12() + 0x2e bytes
user32.dll!_NtUserMessageCall@28() + 0x15 bytes
user32.dll!_RealDefWindowProcWorker@24() + 0x26afe bytes
user32.dll!_RealDefWindowProcW@16() + 0x2a bytes
uxtheme.dll!_ThemeDefWindowProc() + 0x152 bytes
uxtheme.dll!_ThemeDefWindowProcW@16() + 0x18 bytes
user32.dll!_DefWindowProcW@16() + 0x805 bytes
> Player.exe!cnWindowProc(HWND__ * hWnd=0x006507f4, unsigned int message=0x00000047, unsigned int wParam=0x00000000, long lParam=0x0034eea8) Line 502 + 0x18 bytes C++

我想知道 Windows 在这里等待什么。 DirectX 由一个单独的线程创建和拥有,但该线程不会卡住。对于丢失的设备,我们似乎正在正确处理事情(释放视频内存资源并调用 Reset())。

如果有人知道为什么 windows 卡在这里,我将不胜感激。

最佳答案

通常当我看到这个问题时,是因为在使用 SetWindowLong() 函数设置窗口样式后需要调用 SetWindowPos()。在调用 SetWindowPos() 之前不会更新更改,详情如下:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633591%28v=vs.85%29.aspx

不调用 SetWindowPos() 似乎并不总是会崩溃,但有时会。我不确定为什么结果通常如此零星。无论哪种方式,如果没有该调用,结果都不会更新。

关于c++ - Windows 在 WM_WINDOWPOSCHANGED 中挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14371954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com