这样一个bug..
bug的现象就是程序在退出之前,会产生一个崩溃的对话框,但是这个对话框基本上看不到,只能听到崩溃声,闪的太快了。
这个bug是由多线程导致的,具体为:
主线程有个叫TextureManager的单态对象,它在构造的时候会创建一个子线程,而这个子线程是靠调用他的GetSingleton()静态函数来判断这个单态是否存在,而是否选择返回的,即,如果这个TextureManager指针为空,他就返回:
DWORD WINAPI TextureProcessThread(LPVOID lpParam)
{
while (true)
{
// 为空,则意味着CTextureManager对象已被销毁
if (CTextureManager::GetSingleton() == NULL)
break;
}
return 0;
}
而GetSingleton静态成员函数是这样的:
static CTextureManager*GetSingleton() {assert(s_pSingleton != NULL); return s_pSingleton;}
这里就有个assert断言,而程序在退出的时候,由于子线程并不能及时的被关闭,故,当s_pSingleton为NULL的时候,子线程的while循环依然在跑,这就跑到了assert()那了,但是由于此时主线程已经退出了,所以崩溃框也随即被关闭,造成了只能听到崩溃声,却看不到对话框的情况,
这个BUG把我困扰了2天才发现......主要是bug很难重现,因为多线程的执行不稳定。
[解决办法]
然后lz想做什么?
main函数退出的时候发送一个信号量,其他线程等接到这个信号量了都退出?