CoUninitialize挂起


    最近遇到一个比较诡异的故障.现象是这样的:进行长时间运行程序退不出来(经过测试大概大于6分钟) ,短时间一切正常(小于6分钟)。最后经过打日志等手段,在退出时执行到CoUninitialize时挂起(短时间运行是正常的)。本来以为是COM对象应用的不正确,释放时出问题,这个程序比较小,普查了一遍也没有发现什么问题。最后在网上找到一个谈到COM库6分钟的一个故障,我也就把这个归结为COM库的故障了。
  这个故障大概是样的,远程COM之间交互式每2分钟PING一次,超过3次没有回复就认为对方断掉,就回收资源。而对方因为忙在这6分钟内没有回复,但对方还认为客户端在,在回收资源(CoUninitialize)就会挂起,具体细节的仔细研究COM机制才能弄清楚。
   因为这个程序是有一个主线程创建单线程套件,还有一个工作线程也创建单线程套件,主线程通过消息通知工作线程工作内容,工作线程将工作进度和结果通过消息通知主线程。两个线程都有消息循环,工作线程的消息循环是在COM单线程套件中。
  最后解决办法是将工作线程的消息循环放到套件外面,就可以解决了。本来是想要交换一下主线程和工作线程的COM服务器和客户端的角色。可能是因为消息循环原因。等以后有时间再将原理搞清楚,先解决了再说。
  在项目开发过程中会有很多意想不到的风险的,有些是系统的故障,或则应用不合理导致的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值