线程被销毁时的通知

Gra*_*Lup 4 c++ winapi multithreading

有没有办法在应用程序中获取线程不再运行(已返回)的通知?
我知道这在内核模式下是可行的(使用PsSetCreateThreadNotifyRoutine),但有没有办法从用户模式知道这一点,只使用Win32 API?

问题是我无法控制线程中的代码,因为我的模块是库的一部分.让驱动程序监控系统不会太难,但即使对于使用我的库的基本应用程序,用户安装驱动程序也很烦人.

我的代码使用TLS存储,在Linux/Unix下,pthread_key_create可以获取指向线程被销毁时调用的函数的指针.但是TlsAlloc(Windows)没有这样的......

提前致谢!

Ind*_*000 5

Fibers也提供类似的功能.来自MSDN:

FlsAlloc,FlsCallback,FlsFree

FlsCallback回调函数

应用程序定义的函数.如果正在使用FLS插槽,则在光纤删除,线程退出以及释放FLS索引时调用FlsCallback.

  • 现在我看到这在Win Xp下不起作用,只有2003和Vista :( (2认同)

Fra*_*ack 5

取决于你有什么样的图书馆.对于DLL,可以处理DllMain(DLL_THREAD_DETACH)中的线程终止.在MSDN指出,这是为了对付TLS资源的最佳场所.

请记住,此回调仅适用于干净地退出的线程(不是通过例如TerminateThread()).