0

J'ai un exécutable en mode mixte et j'ai remarqué que le constructeur de mes variables globales natives est appelé dans le thread principal, mais le destructeur est appelé dans un autre thread.
Le nom du thread est 'Thread :: intermediateThreadProc'.Variables globales non détruites dans le thread principal?

Pour quelle raison? Et quel est ce thread 'Thread :: intermediateThreadProc'?

Merci.

+0

sont les globals natifs ou gérés? – ngoozeff

+0

natif, j'ai mis à jour la question – eli

Répondre

4

Thread :: intermediateThreadProc() est une petite fonction d'assistance dans le CLR qui est utilisée comme fonction de démarrage de thread pour tout thread démarré par le CLR. Retrouvez-la dans la source SSCLI20, src \ vm \ threads.cpp

Voir cette exécution sur un autre thread est à prévoir. Le code de nettoyage s'exécute lorsque l'appdomain est déchargé. La logique CLR pour cela est très compliquée, mais il semble qu'elle fonctionnera quand le domaine d'application exécutera le thread de finalisation pour la dernière fois pour nettoyer le tas. Vous pouvez supposer que tous les objets gérés sont morts et qu'aucun autre thread n'est en cours d'exécution. Méfiez-vous que votre code est soumis au délai d'attente de thread deux finalizer deuxième.

+0

belle réponse. Merci! – eli