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) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |