Выход из потока при удалении статического объекта во время выгрузки DLL вызывает взаимоблокировку?

У меня есть один экземпляр (глобального/статического объекта )ClassA внутри моей отложенной -загруженной DLL. Этот объект внутри имеет поток «Наблюдатель», который необходим для корректного завершения работы. Когда я вызываю FreeLibrary, я заметил, что во время удаления этого статического объекта мой поток запросил завершение работы, но зависает на _endthreadex ()и вызывает взаимоблокировку. Неважно, вызываю ли я _endthreadex явно или неявно.Неважно, является ли объект глобальным или статическим -, результат один и тот же. Этот поток, обернутый в ClassB (, реализован шаблоном с пользовательским циклом сообщений ). Существует запрос на завершение потока (с сообщением )и следующим за ним WaitForSingleObject, который никогда не возвращается для данного дескриптора потока.

Один и тот же «шаблон класса потока», используемый повсюду в коде, и завершение работы прекрасно работает. Единственная проблема при удалении статического объекта. Я думаю, что внутри _endthreadex ()есть какая-то блокировка, которая уже заблокирована при выгрузке dll и удалении статических объектов.

Поток запущен с _beginthreadex. пс. Когда я создал экземпляр того же статического объекта внутри приложения -, приложение закрывается без каких-либо серьезных проблем.

Есть идеи, почему _endtreadex вызывает взаимоблокировку? Как этого избежать?

6
задан adspx5 4 May 2012 в 00:11
поделиться