如果线程被销毁,是否可以收到通知?我在这里已经看到过这样的问题: Notification when a thread is destroyed
答案是: DLL_THREAD_DETACH ,但在 TerminateThread 的情况下,它不会被调用。 所以,我的问题是,是否有可能检测到终止?我不想阻止它,只是在我的任何线程被破坏时收到通知。我不一定想要使用DllMain,任何解决方案都会很棒!
我正在使用DLL,它被注入我的主应用程序,所以我不能使用WaitForSingleObject,因为它挂起了主要的可执行文件。
感谢您的回答。
(P.s。:只是为了理解,我的dll工作方式如下:主应用程序加载DLL,在DLL_PROCESS_ATTACH上,我打开一些线程。)
编辑: 我忘记了,我正在使用Windows& Visual Studio 2013。
编辑2: 我来到禁用线程库调用,是没用的。我的意思是它没有像我想象的那样工作:) /我删除了那部分,所以它不会误导任何人
答案 0 :(得分:0)
我刚刚提到了有关DllMain()的文档:
如果你通过调用TerminateThread终止一个线程,那就是那个DLL 线程不会收到DLL_THREAD_DETACH通知。
因此,如果线程termanatin你将不会收到DLL_THREAD_DETACH。 关于DLL_THREAD_DETACH的重要思考是,如果"线程正在彻底退出"
,您将收到此通知。答案 1 :(得分:0)
你可以运行一个观察者线程,它将监视你需要的所有线程并生成“没有更多线程”#34;通知。
答案 2 :(得分:0)
我建议让你的DLL生成自己的工作线程,然后可以在需要监视的线程的句柄上使用WaitForSingleObject()
。当线程终止时,即使被TerminateThread()
终止,也会发出句柄信号。更好的方法是使用WaitForMultipleObjects()
,以便您的DLL可以在需要终止时发出工作线程的信号,例如使用CreateEvent()
和SetEvent()
。这样,工作线程不需要运行忙循环来定期查找终止条件。