0

나는 혼합 모드 실행 파일을 가지고 있고 내 기본 전역 변수의 생성자가 주 스레드에서 호출되지만 소멸자는 다른 스레드에서 호출된다는 것을 알게되었습니다.
스레드의 이름은 'Thread :: intermediateThreadProc'입니다.전역 변수가 주 스레드에서 파괴되지 않았습니까?

왜 그럴까요? 그리고이 'Thread :: intermediateThreadProc'스레드는 무엇입니까?

감사합니다.

+0

은 기본 또는 관리되는 전역 변수입니까? – ngoozeff

+0

native, 질문 : – eli

답변

4

Thread :: intermediateThreadProc()는 CLR에서 시작한 모든 스레드에 대한 스레드 시작 함수로 사용되는 CLR의 작은 도우미 함수입니다. SSCLI20 소스에서 다시 찾으십시오. src \ vm \ threads.cpp

다른 스레드에서이 런보기가 필요합니다. appdomain이 언로드되면 정리 코드가 실행됩니다. CLR 논리는 매우 복잡하지만 appdomain이 마지막으로 힙을 정리하기 위해 finalizer 스레드를 실행할 때 실행되는 것처럼 보입니다. 모든 관리 객체가 죽었고 다른 스레드가 실행 중이 지 않은 것으로 가정 할 수 있습니다. 코드가 두 번째 종료 자 스레드 시간 초과의 영향을받습니다.

+0

좋은 답변입니다. 감사! – eli