我有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);
}
}
Run Code Online (Sandbox Code Playgroud)
我在下一行有一个断点:
AttachThreadInput(nForeThread, nAppThread, TRUE);
Run Code Online (Sandbox Code Playgroud)
因此,如果我按下F10或F11或F5按钮,则VS会立即挂起.
可能是什么问题呢?
我有以下代码:
#include <memory>
class Foo;
typedef std::tr1::shared_ptr<Foo> pFoo_t;
class DoSomething
{
public:
static void doSomething( pFoo_t p) { printf( "doing something...\n"); }
static void doSomethingElse( pFoo_t p) { printf( "doing something else...\n"); }
};
class Foo
{
public:
Foo() { printf( "foo()\n"); }
~Foo() { printf( "~foo()\n"); }
public:
void doSomething() { DoSomething::doSomething(pFoo_t(this)); }
void doSomethingElse() { DoSomething::doSomethingElse(pFoo_t(this)); }
};
int _tmain(int argc, _TCHAR* argv[])
{
Foo foo;
foo.doSomething();
foo.doSomethingElse();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我开始这个样本,然后我得到下一个断言:_BLOCK_TYPE_IS_VALID(pHead-> nBloakUse).
我怎么能避免这个?
我使用以下代码来解决此问题:
class Foo;
typedef …Run Code Online (Sandbox Code Playgroud)