不要在dll及ocx的CXXXApp::InitInstance中调用创建线程及关闭线程的操作

在DLL和OCX控件中,不应在CXXXApp::InitInstance中创建线程,也不应在CXXXApp::ExitInstance中关闭线程并等待其结束。这可能导致注册时的死锁,因为DLL的初始化和终止函数是串行执行的。线程的创建与退出需要等待DLL的DTOR完成,这可能导致新线程的入口点无法被调用,直到所有DLL的ATL_DllMain退出工作。
摘要由CSDN通过智能技术生成

问题:

写了个ocx控件,然后在ocx控件注册时注册成功了,但regsvr32还在进程管理器中。

分析后发现在注册ocx控件时,ocx控件的代码CXXXApp::InitInstance会被调用,注册完后CXXXApp::ExitInstance会被调用。

由于在ExitInstance中调用退出线程,并等待线程退出的代码,死锁了,所以regsvr32卡死在进程管理器了。


条件1

Does creating a thread from DllMain deadlock or doesn't it
 

Let me get this out of the way up front: Creating a thread from DllMain is not recommended. The discussion here has to do with explaining the behavior you may observe if you violate this advice.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值