描述:
各位大虾:
我在一个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:
每一个进程都有一个主线程(也是缺省线程, 一个进程中至少要有一个线程),就是main函数调用开始的那个线程. 这个线程是由系统创建的, 你自己创建的线程都是副线程, 当主线程结束之后, 系统就会自动终止所有的副线程(系统调用TerminateThread函数), 所以你创建的线程在主线程结束之后也跟着终止了, 所以你想要维持线程运行,必须要让主线程一直存在.
你为什么要这样做?
解决方案3:没有程序引用该 COM 时,将会自动释放。
解决方案4:在start函数中创建一个窗口,在stop中destroy那个窗口
解决方案5: 可以人为增加接口记数
或用ColockObjectExternal锁住对象,我用的这个
API : WaitForSingleObject()