[分享][原创]关于在MFC规则DLL的App初始化时创建线程的失败原因
那天在MSDN上发问题的时候看到一篇贴子,里面提问为什么在MFC规则DLL的App初始化时创建线程的失败。
他是这样做的:
...CMyApp::InitInstance()
{
::AfxBeginThread(.....); }
我感到很有意思,就自己测试了一下,经过调试发现是程序走到一个事件对象时候死锁了
::WaitForSingleObject(事件对象,INFINITE); \\永远等待事件对象
当时也是百思不得其解......
后来我翻了翻《Windows核心编程》,找到了问题所在:
因为DLL当每次有新线程创建的时候,系统都会查看当前映射到此进程的地址空间中的所有DLL,并且调用每个DLL带有DLL_THREAD_ATTACJH值的DllMain函数,又因为当前就是在这个DLL的DllMain函数里,所以就死锁了。