描述:
一个COM中调用了一个API,这个API会创建线程。在一个普通应用程序中调用这个API没有任何问题,可以正常运行和退出。可是在COM中调用时,当调用COM的程序退出,API的线程没有终止,应用程序的进程也就一直存在。请问这种情况可能是什么原因造成的呢?谢谢!
解决方案1:
学习
解决方案2: COM组件实例使用时,所有导出接口指针都会导致引用计数的增加,接口指针使用完了一定要记得调用release,只要计数正确,不会有这样的问题,有两种可能:
1、接口指针没释放。
2、有别的线程在共享COM组件实例。
个人比较倾向星最多的那个老兄的说法,曾经在window服务器里面开启监听服务,启动线程,一般的程序就很好用,但是到了windows服务程序下面就会莫明的死掉,怀疑也是消息机制的控制问题。
解决方案4:Mark.
解决方案5:gz
解决方案6:学习,学习
解决方案7: 是不是因为这个线程是启动在系统服务中,而不是在你自己的进程空间中的呢?
或者还要调用一个什么API去结束它呢?
一般来说,你需要一个消息循环来列集COM操作。也就是说,如果消息循环终止,那么后续的COM操作可能失败。你应该在消息循环终止前确保释放了所有COM对象。
解决方案9:ptr->Release();是不是被锁了呢
解决方案10:释放之前有没有销毁线程
解决方案11:你忘记释放组件了
解决方案12: 这种问题我有遇到过。
因为COM的窗口和消息机制与MFC下是不一样的,在COM下,你要特别注意内存指针的释放问题。注意线程中资源要及时清除
可能api创建的线程接管了消息循环.只要主线程退出了,进程绝对会消亡.你具体的分析一下API创建的线程干了些什么