DisableThreadLibraryCalls 函数 (libloaderapi.h)
禁用指定动态链接库 (DLL) 的DLL_THREAD_ATTACH和DLL_THREAD_DETACH通知。 这可以减少某些应用程序的工作集的大小。
语法
BOOL DisableThreadLibraryCalls(
[in] HMODULE hLibModule
);
参数
[in] hLibModule
要为其禁用DLL_THREAD_ATTACH和DLL_THREAD_DETACH通知的 DLL 模块的句柄。 LoadLibrary、LoadLibraryEx 或 GetModuleHandle 函数返回此句柄。 请注意,不能使用 NULL
调用 GetModuleHandle,因为这将返回可执行映像的基址,而不是 DLL 映像。
返回值
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 如果 hModule 指定的 DLL 具有活动的静态线程本地存储,或者 hModule 是无效的模块句柄,则 DisableThreadLibraryCalls 函数将失败。 要获得更多的错误信息,请调用 GetLastError。
注解
DisableThreadLibraryCalls 函数允许 DLL 禁用DLL_THREAD_ATTACH和DLL_THREAD_DETACH通知调用。 对于具有许多 DLL、经常创建和删除线程且 DLL 不需要这些线程级附件/分离通知的多线程应用程序而言,这非常有用。 远程过程调用 (RPC) 服务器应用程序就是此类应用程序的一个示例。 在这些类型的应用程序中,DLL 初始化例程通常保留在内存中以服务DLL_THREAD_ATTACH和DLL_THREAD_DETACH通知。 通过禁用通知,DLL 初始化代码不会分页,因为线程已创建或删除,从而减少了应用程序的工作代码集的大小。 若要实现优化,请修改 DLL 的DLL_PROCESS_ATTACH代码以调用 DisableThreadLibraryCalls。
请勿从链接到静态 C 运行时库的 DLL (CRT) 调用此函数。 静态 CRT 需要DLL_THREAD_ATTACH和DLL_THREAD_DETATCH通知才能正常工作。
如果启用了静态 线程本地存储 (TLS) ,此函数不会执行任何优化。 使用 thread_local 变量、 __declspec (线程 ) 变量或函数本地静态时启用 静态 TLS。
要求
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | libloaderapi.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |