COM调用问题:怎样在应用程序调用完COM的方法,并退出后,使COM继续运行?

lcp 2003-08-06 03:07:19
各位大虾:
我在一个outproc COM中有两个方法:
start()
stop()
start()方法启动一个线程;stop()方法中止这个线程;
我希望在应用程序中调用这两个方法:
1.调用start()方法,然后应用程序退出,COM继续运行;
2.直到调用stop()方法,COM停止运行。


CMycom:IMycom
{
...
}
CMycom::start()
{
id = _thread(..., mythreadproc , ) ;
}
CMycom::stop()
{
_endthread( id );
}


main函数如下:
main()
{
CoInitialize() ;
//create a COM interface pointer;
IMycom *myCom = CoCreateInstance(...);

myCom->start() ;

CoUninitialize() ;
}

当应用程序退出,COM似乎也中断了start方法中的线程,退出了;
我希望COM能够不退出,继续运行这个线程,该怎么办?

有能给予帮助者,再给100分!
谢谢!
...全文
38 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcp 2003-08-07
  • 打赏
  • 举报
回复
我已经搞定了,
就是使用NT Service,让COM一直在运行,就可以了。
谢谢各位热心帮助!
人人有份!
xiaoshan 2003-08-06
  • 打赏
  • 举报
回复
每一个进程都有一个主线程(也是缺省线程, 一个进程中至少要有一个线程),就是main函数调用开始的那个线程. 这个线程是由系统创建的, 你自己创建的线程都是副线程, 当主线程结束之后, 系统就会自动终止所有的副线程(系统调用TerminateThread函数), 所以你创建的线程在主线程结束之后也跟着终止了, 所以你想要维持线程运行,必须要让主线程一直存在.
lcp 2003-08-06
  • 打赏
  • 举报
回复
各位大虾:
我现在在一个console程序里面调用COM接口,已经实现了以上功能,
就是把COM做成service类型的;
但是,如果把console程序作为cgi程序,通过网页调用,程序退出,COM里面的线程好像又被中止了!
不知是什么原因?请大家再指点一下。
WQ 2003-08-06
  • 打赏
  • 举报
回复
可以人为增加接口记数
或用ColockObjectExternal锁住对象,我用的这个
RickeyLau 2003-08-06
  • 打赏
  • 举报
回复
在start函数中创建一个窗口,在stop中destroy那个窗口

这样做可以满足你的要求
lcp 2003-08-06
  • 打赏
  • 举报
回复
我希望我调用这个方法后,服务就开始跑了,不用我的应用程序一直开着;
然后直到我调用另外一个方法,中止服务。

希望 fanfyj(程序员小范) 及各位大虾,不吝指教。
fanfyj 2003-08-06
  • 打赏
  • 举报
回复
你为什么要这样做?
lcp 2003-08-06
  • 打赏
  • 举报
回复
谢谢各位大虾的指点;
不过,可能大家没有明白我的意思:
我在一个应用程序中调用com的一个方法,然后退出,希望此方法中创建的线程继续运行;
而且我不能在应用程序中等待线程退出,只能启动线程然后马上退出;
由另一个程序来调用stop方法中止线程。
喝醉的咖啡 2003-08-06
  • 打赏
  • 举报
回复
没有程序引用该 COM 时,将会自动释放。
RickeyLau 2003-08-06
  • 打赏
  • 举报
回复
在start函数中创建一个窗口,在stop中destroy那个窗口
tigerfox 2003-08-06
  • 打赏
  • 举报
回复
API : WaitForSingleObject()

3,245

社区成员

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

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