Допускается ли создание в библиотеке DLL MFC нескольких потоков?
Обновлен: Ноябрь 2007
За исключением периода инициализации в библиотеке DLL MFC допускается создание нескольких потоков, поскольку в ней используются функции локальной памяти потока Win32 (например, TlsAlloc) для выделения локальной памяти потока. Однако если в библиотеке DLL MFC для выделения локальной памяти потока используется функция __declspec(thread), клиентское приложение должно быть неявно связано с библиотекой DLL. Если клиентское приложение явно связано с библиотекой DLL, при вызове функции LoadLibrary загрузка библиотеки DLL завершится с ошибкой. Дополнительные сведения о создании нескольких потоков в библиотеках DLL см. в статье базы знаний Майкрософт "PRB. Вызов функции LoadLibrary() для загрузки библиотеки DLL со статической TLS" (Q118816).
При загрузке приложением библиотека DLL, которая создает новый поток MFC при запуске, зависнет. Это относится к созданию потока с помощью вызова как функции AfxBeginThread, так и CWinThread::CreateThread внутри:
InitInstance объекта, производного от CWinApp в обычной библиотеке DLL;
предоставленной функции DllMain или RawDllMain в обычной библиотеке DLL;
предоставленной функции DllMain или RawDllMain в библиотеке DLL расширения.
Дополнительные сведения о создании потоков во время инициализации см. в статье базы знаний Майкрософт "PRB. Не удается создать поток MFC при запуске библиотеки DLL" (Q142243).