混合モードの実行可能ファイルがあり、ネイティブグローバル変数のコンストラクターがメインスレッドで呼び出されているのに、デストラクタが他のスレッドで呼び出されていることに気付きました。
スレッドの名前は「Thread::intermediateThreadProc」です。
これの理由は何ですか?そして、この'Thread :: intermediateThreadProc'スレッドとは何ですか?
ありがとう。
混合モードの実行可能ファイルがあり、ネイティブグローバル変数のコンストラクターがメインスレッドで呼び出されているのに、デストラクタが他のスレッドで呼び出されていることに気付きました。
スレッドの名前は「Thread::intermediateThreadProc」です。
これの理由は何ですか?そして、この'Thread :: intermediateThreadProc'スレッドとは何ですか?
ありがとう。
Thread :: intermediateThreadProc()は、CLRで開始されるスレッドのスレッド開始関数として使用される、CLRの小さなヘルパー関数です。SSCLI20ソース、src \ vm\threads.cppでそれを見つけてください
この実行が別のスレッドで実行されるのを確認する必要があります。appdomainがアンロードされると、クリーンアップコードが実行されます。そのためのCLRロジックは非常に複雑ですが、ヒープをクリーンアップするためにappdomainが最後にファイナライザースレッドを実行したときに実行されるようです。すべての管理対象オブジェクトが停止しており、他のスレッドが実行されていないと想定できます。コードは2秒のファイナライザースレッドタイムアウトの影響を受けることに注意してください。