有没有办法,我勾管理线程的出口(即运行一个线程一些代码,其退出前?)挂钩线程退出
我已经开发了挂钩线程退出一个可行的机制为部分线程。第1步:开发一个'hook'STA COM类,它接受一个回调函数并在析构函数中调用它。第2步:在我想挂钩的线程上创建一个ThreadStatic实例,并将该对象的托管代理转换为非托管函数指针。该代理然后调用线程退出(因为CLR在所有STA COM RCW上调用IUnknown :: Release作为线程退出的一部分)。
此机制适用于我使用Thread类在代码中创建的工作线程。
但是,它似乎不适用于应用程序的主线程(无论是控制台还是Windows应用程序)。 'hook'COM对象似乎在关闭过程中被删除的太晚,并且调用委托的尝试失败。
(我想实现这个功能的原因是,我可以在退出的线程上运行一些原生COM代码,该线程与线程上创建的STA COM对象一起工作,在“太迟”之前(即线程之前已退出,并且不再可以在该线程上使用STA COM对象。))
第1段:没有。第2段:是的,但没问题。第3段:否,本地C++实现的coclass的析构函数。第4段:嗯,我会检查一下。第5段:尽管如此。 – mackenir 2009-07-26 14:39:31