线程与COM
来源:互联网 发布:淘宝客商家入驻 编辑:程序博客网 时间:2024/05/30 05:12
场景:
C++部分封装为COM,C#来调用。调用可能是在线程中的。
应用程序退出时,C#的部分 自动清理,某些线程可能还没有完全停掉。
COM内部的东西也在释放内存。
这个时候,稍有不慎,就会崩溃。
冲突点:
1. 多个线程重复ReleaseComObject,
2. C#某个线程还在使用,另外一个线程或者主线程去ReleaseComObject。
3. 已经进行了ReleaseComObject, c#某个线程还在使用。
最让人郁闷的地方是:
try{ Marshal.ReleaseComObject(obj); obj = null;}catch (System.ArgumentException ex){ Debug.Assert(false, ex.Message);}
这个Try-Catch 是没用的,出来异常,照样死掉。
仔细排查,解决办法如下:
1. 针对多个线程重复ReleaseComObject的问题,确定“谁创建谁Release”的原则,无法确定的,留到App Exit的时候Release。
2. 资源已经Release,还在使用的问题
检查发现有个线程sleep了100个毫秒,这个赶紧改掉。App exit的时候,100ms可以干好多事情的。
另外, 不知道有没有好的办法来判断COM对象存在与否,能否安全调用。
3. 正在使用的资源,另外一个线程去Release, 遵照第一个原则来执行。
4. 线程内循环的方法,粒度尽量小,便于及时更新UI和快速刹车。
5. 线程工厂,尽可能的简单明了。复杂的代价是写的痛苦,维护的痛苦。
尝试着改了几个地方,发现还是有问题。失控的多线程遇上了COM,真的难搞。
- 线程与COM
- COM的套间与线程
- 套件与COM线程模型(Threading mode)
- COM与COM+技术
- COM线程模型
- 小议 COM 线程模型
- 小议 COM 线程模型
- COM的线程模型
- COM线程模型
- COM线程模型
- COM线程模型
- COM线程模型
- COM线程模型
- COM线程模型-套间
- COM线程模型
- COM线程模型详解
- COM线程模型【转贴】
- COM线程模型
- 树的直径与树的中心
- Hdu4582-DFS spanning tree VS Pku2152-Fire 一类平方级树形最小覆盖问题
- windows 2008 server下设置防火墙的例外端口及程序
- POJ 2240 Arbitrage【Bellman_ford坑】
- 进制规范
- 线程与COM
- mysql事务、触发器、视图、存储过程、函数
- 数据库用户映射到SQL Server登录名
- HDU 2064 汉诺塔III
- 产生冠军((hdu2094))((拓扑排序))
- 双向循环链表的创建,插入与删除。
- POJ 3273 Monthly Expense(二分枚举)
- Android 绿豆蛙版连连看(简陋版)
- 更改CentOS桌面分辨率