COM和线程的问题

突击召唤师 2004-11-12 03:40:08
一个COM中调用了一个API,这个API会创建线程。在一个普通应用程序中调用这个API没有任何问题,可以正常运行和退出。可是在COM中调用时,当调用COM的程序退出,API的线程没有终止,应用程序的进程也就一直存在。请问这种情况可能是什么原因造成的呢?谢谢!
...全文
258 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
yszmax 2004-11-16
  • 打赏
  • 举报
回复
学习
hjunxu 2004-11-16
  • 打赏
  • 举报
回复
学习,学习
hjunxu 2004-11-16
  • 打赏
  • 举报
回复
是不是因为这个线程是启动在系统服务中,而不是在你自己的进程空间中的呢?
或者还要调用一个什么API去结束它呢?
XXandOO 2004-11-16
  • 打赏
  • 举报
回复
COM组件实例使用时,所有导出接口指针都会导致引用计数的增加,接口指针使用完了一定要记得调用release,只要计数正确,不会有这样的问题,有两种可能:
1、接口指针没释放。
2、有别的线程在共享COM组件实例。
突击召唤师 2004-11-16
  • 打赏
  • 举报
回复
问题是,我的COM没有暴露被调用的API,也需要列集?
toxyboy 2004-11-15
  • 打赏
  • 举报
回复
个人比较倾向星最多的那个老兄的说法,曾经在window服务器里面开启监听服务,启动线程,一般的程序就很好用,但是到了windows服务程序下面就会莫明的死掉,怀疑也是消息机制的控制问题。
dreamy 2004-11-15
  • 打赏
  • 举报
回复
Mark.
allenq 2004-11-15
  • 打赏
  • 举报
回复
gz
突击召唤师 2004-11-15
  • 打赏
  • 举报
回复
微软专家陪我们干了两个通宵,也没搞定。问题大了。 -__-
我们是用COM包装API,API中启动了监视线程。我们不知道这个监视线程如何退出。对于普通应用程序来说明,退出的时候是不管有没有线程在运行的,泄漏就泄漏了。可是不知道为什么,COM里有没结束的线程,整个进程就无法退出。
蒋晟 2004-11-13
  • 打赏
  • 举报
回复
一般来说,你需要一个消息循环来列集COM操作。也就是说,如果消息循环终止,那么后续的COM操作可能失败。你应该在消息循环终止前确保释放了所有COM对象。
Kudeet 2004-11-12
  • 打赏
  • 举报
回复
ptr->Release();是不是被锁了呢
突击召唤师 2004-11-12
  • 打赏
  • 举报
回复
红星闪闪啊,闪阿闪阿
我的问题怎么就这么难啊,难啊难啊
突击召唤师 2004-11-12
  • 打赏
  • 举报
回复
线程是API里面的,COM管不了,测试程序更管不了。而且,直接用测试程序调用API就没问题
ukyoking 2004-11-12
  • 打赏
  • 举报
回复
释放之前有没有销毁线程
突击召唤师 2004-11-12
  • 打赏
  • 举报
回复
ptr->Release();

好像已经释放了 -__-
ukyoking 2004-11-12
  • 打赏
  • 举报
回复
你忘记释放组件了
kingzai 2004-11-12
  • 打赏
  • 举报
回复
这种问题我有遇到过。
因为COM的窗口和消息机制与MFC下是不一样的,在COM下,你要特别注意内存指针的释放问题。注意线程中资源要及时清除
突击召唤师 2004-11-12
  • 打赏
  • 举报
回复
疑惑,通过COM调用和直接调用有什么区别呢
xenke 2004-11-12
  • 打赏
  • 举报
回复
可能api创建的线程接管了消息循环.只要主线程退出了,进程绝对会消亡.你具体的分析一下API创建的线程干了些什么

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧