标签:线程 动态库 软件 取出 就会 无线网络 无线 nta 消息
应用场景:
上层业务需调用一个短信中心动态库,此短信中心模块单独开了一个线程,用于从队列中取出消息来调用相应的短信通信模组,通过无线网络发送短信内容到用户手机上。
使用中出现了一个问题,如果底层的短信通信模组动态库卸载了,在上层业务中测试发送短信,短信中心模块的线程由于未退出,收到数据后继续发送,由于底层通信模组被卸载了,就会发送失败,且造成上层业务软件崩溃。此问题可归纳为一般场景:
动态库被卸载前,如何正确退出动态库开的线程。
解决思路:
动态库A使用两个事件退出标识,一个是动态库A退出事件标识EventA,一个是线程B退出事件标识EventB。线程B在一个循环中等待动态库A的退出事件,收到了上层业务卸载动态库A调用时,先激活自身退出事件EventA,随后阻塞等待线程B退出事件。线程B收到EventA后清理资源,并激活线程B的EventB,阻塞等待的动态库A收到EventB后就知道线程B退出了,之后开始卸载底层通信模组。
相关的代码片段如下:
未完待续..
标签:线程 动态库 软件 取出 就会 无线网络 无线 nta 消息
原文地址:https://www.cnblogs.com/japelly/p/10290451.html