У меня есть поток A, который создает другой поток B, чем поток A ждет, используя WaitForSingleObject, чтобы ждать, пока нить B не умрет.WaitForSingleObject с ручкой потока застревают во время работы regsvr32.exe
Проблема в том, что хотя поток B возвращается из потока thread_func, поток A не получает сигнал!.
Я знаю, потому что я добавил следы (OutputDebugString) в конец thread_func (основная функция потока B), и я вижу, что поток B заканчивает выполнение, но нить A никогда не выходит из WaitForSingleObject.
Теперь я должен добавить, что этот код находится в COM-объекте, и описанный выше сценарий происходит, когда я вызываю regsvr32.exe (он застревает!), Поэтому я считаю, что поток A исходит из DLLMain.
Любые идеи, почему нить А не сигнализируется?!?!
Вы абсолютно правы !!! Я не знал, что он работает так! Поэтому я предполагаю, что я буду использовать другое событие, чтобы сигнализировать поток конца потока B. – TCS
+1 на этот ответ. Если DllMain вызывает какой-либо нетривиальный путь кода (включая код, который вызывает системные и API-вызовы), просто запрашивает проблемы. – selbie