CDebugInfoManager* CDebugInfoManager::Singleton()
{if(0 == m_pInstance)
{
m_pInstance = new CDebugInfoManager;
CreateConsole();
}
return m_pInstance;
}
void CDebugInfoManager::CreateConsole()
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
if(0 == handle)
{
AllocConsole();
SetConsoleTitle("Debug Window");
handle = GetStdHandle(STD_OUTPUT_HANDLE);
}
m_hConsole = handle;
}
在CreateConsole()中, 之所以要先调GetStdHandle(), 是为了保证出现以下情况时能不重复调用AllocConsole.
假设程序A运行时调用了动态库B. 而在A和B中在编译时各自调用了自已的CDebugInfoManager.
由于一个进程中只允许有一个console存在. 所在无论谁先调用AllocConsole生成了console对象, 用以上的方法都可以保证两处的CDebugInfoManager中使用的是
同一个console对象.
不过, msdn中说, 如果调用AllocConsole失败会返回 0. 如果在事先存在一个console对象的前提下, 再次调用AllocConsole是否会因失败而返回0呢?
这个需要试一下, 如果是的话, 也可以借助这一机制来保证所引用console对象的唯一性.
4829

被折叠的 条评论
为什么被折叠?



