Функция DisableThreadLibraryCalls (libloaderapi.h)
Отключает уведомления DLL_THREAD_ATTACH и DLL_THREAD_DETACH для указанной библиотеки динамической компоновки (DLL). Это может уменьшить размер рабочего набора для некоторых приложений.
Синтаксис
BOOL DisableThreadLibraryCalls(
[in] HMODULE hLibModule
);
Параметры
[in] hLibModule
Дескриптор модуля DLL, для которого необходимо отключить уведомления DLL_THREAD_ATTACH и DLL_THREAD_DETACH. Функция LoadLibrary, LoadLibraryEx или GetModuleHandle возвращает этот дескриптор. Обратите внимание, что метод GetModuleHandle нельзя вызвать с NULL
, так как он возвращает базовый адрес исполняемого образа, а не образа DLL.
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Функция DisableThreadLibraryCalls завершается сбоем, если библиотека DLL, указанная в hModule , имеет локальное хранилище активного статического потока или если hModule является недопустимым дескриптором модуля. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Функция DisableThreadLibraryCalls позволяет библиотеке DLL отключить DLL_THREAD_ATTACH и DLL_THREAD_DETACH вызовы уведомлений. Это может быть полезной оптимизацией для многопоточных приложений, которые имеют много библиотек DLL, часто создают и удаляют потоки и для которых библиотеки DLL не нуждаются в уведомлениях уровня потока о вложениях и отсоединениях. Примером такого приложения является серверное приложение удаленного вызова процедур (RPC). В таких приложениях подпрограммы инициализации DLL часто остаются в памяти для обслуживания DLL_THREAD_ATTACH и DLL_THREAD_DETACH уведомлений. При отключении уведомлений код инициализации БИБЛИОТЕКи DLL не выстраивается, так как поток создается или удаляется, тем самым уменьшая размер рабочего набора кода приложения. Чтобы реализовать оптимизацию, измените код DLL_PROCESS_ATTACH библиотеки DLL, чтобы вызвать DisableThreadLibraryCalls.
Не вызывайте эту функцию из библиотеки DLL, связанной со статической библиотекой времени выполнения C (CRT). Для правильной работы статической CRT требуется DLL_THREAD_ATTACH и DLL_THREAD_DETATCH уведомления.
Эта функция не выполняет оптимизацию, если включено локальное хранилище статических потоков (TLS). Статический протокол TLS включается при использовании переменных thread_local , переменных __declspec( потока ) или локальной функции static.
Требования
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | libloaderapi.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |
См. также
Функция Entry-Point библиотеки динамической компоновки