自建最简单的调试窗口

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对象的唯一性.





评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值