各位大虾:
我在一个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分!
谢谢!

解决方案 »

  1.   

    在start函数中创建一个窗口,在stop中destroy那个窗口
      

  2.   

    没有程序引用该 COM 时,将会自动释放。
      

  3.   

    谢谢各位大虾的指点;
    不过,可能大家没有明白我的意思:
    我在一个应用程序中调用com的一个方法,然后退出,希望此方法中创建的线程继续运行;
    而且我不能在应用程序中等待线程退出,只能启动线程然后马上退出;
    由另一个程序来调用stop方法中止线程。
      

  4.   

    我希望我调用这个方法后,服务就开始跑了,不用我的应用程序一直开着;
    然后直到我调用另外一个方法,中止服务。希望 fanfyj(程序员小范) 及各位大虾,不吝指教。
      

  5.   

    在start函数中创建一个窗口,在stop中destroy那个窗口这样做可以满足你的要求
      

  6.   

    可以人为增加接口记数
    或用ColockObjectExternal锁住对象,我用的这个
      

  7.   

    各位大虾:
    我现在在一个console程序里面调用COM接口,已经实现了以上功能,
    就是把COM做成service类型的;
    但是,如果把console程序作为cgi程序,通过网页调用,程序退出,COM里面的线程好像又被中止了!
    不知是什么原因?请大家再指点一下。
      

  8.   

    每一个进程都有一个主线程(也是缺省线程, 一个进程中至少要有一个线程),就是main函数调用开始的那个线程. 这个线程是由系统创建的, 你自己创建的线程都是副线程, 当主线程结束之后, 系统就会自动终止所有的副线程(系统调用TerminateThread函数), 所以你创建的线程在主线程结束之后也跟着终止了, 所以你想要维持线程运行,必须要让主线程一直存在.
      

  9.   

    我已经搞定了,
    就是使用NT Service,让COM一直在运行,就可以了。
    谢谢各位热心帮助!
    人人有份!