Безопасно ли вызывать функцию std:: thread:: join в win32 DLL_PROCESS_DETACH?
Пожалуйста, посмотрите на фрагмент кода ниже / / эти блоки кода, определенные в разделе single .СРР блок в файл DLL проект
------------------ файл DLL -------------------------
static std::thread sendMessageThread; // define as local static to cpp //....// bool callFunction() { /// Some simple code without spawning any thread or fibers } void WINAPI OnEngineStart() { sendMessageThread = std::thread(callFunction); }; BOOL WINAPI DllMain(HINSTANCE hDll, DWORD fdwReason, LPVOID lpvReserved) { switch (fdwReason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: if (sendMessageThread.joinable()) { sendMessageThread.join(); // is this safe? } break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } return TRUE; };
------------------------------------- файл DLL --------------------------
Если процесс, который загрузил DLL, вызывает функцию OnEngineStart, то всякий раз, когда он выгружает DLL(используя функцию FreeLibrary WinAPI), будет ли он ждать, пока sendMessageThread не будет завершен? и продолжить процедуру выгрузки DLL?
Что я уже пробовал:
Я запускаю программу с этой DLL-библиотекой, программа никогда не падает и не останавливается.Но я нашел эти вещи:
Создает ли создание потока из DllMain тупик или нет? - Старая Новая Штука[^]
Рекомендации По Использованию Библиотеки Динамических Ссылок (Windows)[^]