0

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

В чем причина этого? И что это за поток «Thread :: intermediateThreadProc»?

Спасибо.

+0

являются глобальными или управляемыми? – ngoozeff

+0

родной, я обновил вопрос – eli

ответ

4

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

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

+0

хороший ответ. благодаря! – eli