DLL中的thread

如下代码,DLL_PROCESS_ATTACH中创建一个线程,试图在DLL_PROCESS_DETACH中设置结束标记并等待线程结束,程序会死在这里。没有仔细跟踪汇编代码,估计线程结束的时候会进入到DLL_THREAD_DETACH中,但此时DLL进程空间已经没有合适的代码去执行了,所以就挂了。

 

比较隐蔽的情况是把线程作为一个类的成员来实现。类的构造函数在DLL加载的时候创建进程,在DLL_PROCESS_DETACH中delete类,析构的时候就挂掉了。类似的层层包裹使得分析错误原因很麻烦,还是小心避免。

 

还有一种情况是加载DLL的进程退出的时候,被创建的DLL在DLL_PROCESS_DETACH中也可以被系统回收,所以不会死在这里。不过还是不要太信赖操作系统,不符合C/C++程序员的坏习惯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值