huyutian

他强由他强,清风拂山岗;他横由他横,明月照大江。他自狠来他自恶,我自一口真气足

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  20 随笔 :: 47 文章 :: 22 评论 :: 0 Trackbacks
最近用DLL封装一个接口时,出现了死锁。调试分析发现是在DLL初始化时调用了CreateTimerQueue()函数。这个函数会创建一个新的线程。正是由于在DLL初始化时创建新线程导致的死锁。
相似问题讨论网页在这里
http://www.eggheadcafe.com/software/aspnet/33401802/problem-createtimerqueue-in-initinstance.aspx

Note that you cannot do anything that creates threads in a DLL's InitInstance; any attempt to do so will deadlock your application.

Best Practices for Creating DLLs

Multimedia Timer Hangs in MFC DLL InitInstance

其实除了InitInsatance函数外,DllMain,全局变量初始化如果直接或间接创建了新的工作线程都会造成死锁。Best Practices for Creating DLLs介绍了DLL装载详细过程,英文好的兄弟可以自己研究下。
为防资料丢失,在这里保存一份/Files/huyutian/DLL_bestprac.zip
posted on 2011-08-11 21:46 胡雨田 阅读(421) 评论(0)  编辑 收藏 引用 所属分类: 编程技巧

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理