0

Notre application suit these instructions pour définir le nom d'un fil dans C++ natif sur les fenêtres. Les noms de thread s'affichent correctement dans la fenêtre de thread de Visual Studio si vous vous connectez avant que les noms de threads ne soient définis. Toutefois, si vous vous attachez après que les noms de threads sont définis, vous voyez juste un nom par défaut "msvcr120d.dll".C++ natif nom de thread ne s'affiche pas dans la fenêtre de fil studio visuel quand est attaché débogueur après que le fil est nommé

est-il un moyen de faire en sorte que les noms de threads afficheront quel que lorsque vous connectez?

+0

Je ne suis pas particulièrement familier avec la fonction setThreadName, mais de votre question, je suppose que ce n'est pas possible. Cependant, pourquoi ne pas attacher le débogueur avant que le fil est créé? Vous pouvez placer une instruction DebugBreak() juste avant la création du thread. –

+0

Ne pensez pas que cela soit possible en raison de la manière dont Microsoft implémente sa fonction de dénomination de threads. Voir ce billet de blog pour plus d'informations: https://ofekshilon.com/2009/04/10/naming-threads/ – MrEricSir

Répondre

3

objets de discussion dans le système d'exploitation Windows ne sont pas un nom. Nommer les threads est purement une caractéristique du débogueur. Le code pour « set » le nom d'un fil soulève une MS_VC_EXCEPTION, qui est pris par le débogueur, et les informations utilisées pour l'expérience de débogage. Si aucun débogueur n'est présent, le filtre d'exception continue simplement l'exécution.

En d'autres termes: Vous ne pouvez pas avoir nommé fils de discussion, à moins que vous attachez un débogueur avant appeler la fonction SetThreadName selon How to: Set a Thread Name in Native Code.

+0

Je me doutais bien que c'était le cas, mais il ne semble pas être documenté nulle part. Merci! –