Вопрос

У меня есть исполняемый файл смешанного режима, и я заметил, что конструктор моих родных глобальных переменных называется в главном потоке, но деструктор называется в каком-то другом потоке.
Название потока - Thread :: IntermediateThreadProc '.

Что является причиной этого? А что это за поток «Thread :: IntermediateThreadProc '?

Спасибо.

Это было полезно?

Решение

Thread :: IntermediateThreadProc () - небольшая вспомогательная функция в CLR, которая используется в качестве функции запуска потока для любого потока, запускаемой CLR. Найдите его обратно в SSCLI20 Source, src vm threads.cpp

Видеть этот запуск в другой ветке следует ожидать. Код очистки работает, когда приложение разгружается. Логика CLR для этого очень сложна, но, похоже, она будет работать, когда AppDomain запустит поток Finalizer в последний раз, чтобы очистить кучу. Вы можете предположить, что все управляемые объекты мертвы, а другие потоки не работают. Остерегайтесь, что ваш код подчиняется двум вторым тайм -аутом потока финализатора.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top