【发布时间】:2011-12-25 21:50:05
【问题描述】:
我有 Visual Studio 2010 Ultimate SP1,我的项目基于 MFC。
当我调试项目的下一个代码时,Visual Studio 挂起:
CWnd* _window = CWnd::FromHandle(_hwnd_);
if (_window) {
DWORD nForeThread, nAppThread;
nForeThread = ::GetWindowThreadProcessId(::GetForegroundWindow(), 0);
nAppThread = GetCurrentThreadId();
if (nForeThread != nAppThread)
{
AttachThreadInput(nForeThread, nAppThread, TRUE);
_window->BringWindowToTop();
_window->ShowWindow(SW_RESTORE);
AttachThreadInput(nForeThread, nAppThread, FALSE);
}
else
{
_window->BringWindowToTop();
_window->ShowWindow(SW_RESTORE);
}
}
我在下一行有一个断点:
AttachThreadInput(nForeThread, nAppThread, TRUE);
所以如果我按下 F10 或 F11 或 F5 按钮,那么 VS 会立即挂起。
可能是什么问题?
【问题讨论】:
-
首先,你不要检查返回码,
AttachThreadInput可能会失败,你应该经常检查。其次,我的猜测是 VS2010(您将附加到您的线程的线程)所做的事情与此调用或您的输入事件处理不兼容。 -
调用AttachThreadInput后无法获取返回值,VS挂了...
-
关于后者,很可能是。那请问怎么办?
-
你必须想一想你想要完成什么,看看是否有其他方法可以做到。
-
我这样做了。我排除了调试模式的代码(#ifndef _DEBUG)。但是问题没有解决!
标签: c++ visual-studio-2010 debugging mfc freeze