Comment obtenir le nom d’un thread Win32?

Je connais le processus non intuitif pour définir le nom d’un thread sous Windows (voir ” Comment définir un nom pour un thread Win32? “). Est-il possible d’obtenir le nom du fil? Je ne vois aucune API Windows qui me permet de faire cela ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms684847(v=vs.85).aspx ).

Il n’y a pas un tel appel WinAPI car il n’existe pas de noms de threads.

Si vous définissez un nom de thread, le débogueur de votre IDE le stockera pour vous, ce qui facilitera le débogage. Cependant, le nom n’est jamais vraiment attaché au thread par un appel API Windows.

Si vous exécutez votre application sans débogueur, la définition d’un nom de thread n’a aucun effet, vous ne pouvez donc pas récupérer le nom.

Même s’il serait accessible, je n’écrirais pas de code qui ne fonctionne qu’avec un débogueur connecté. Mieux vaut stocker le nom pour vous-même avec la poignée.

Les threads n’ont pas de noms dans Win32. Le processus via RaiseException est juste un “Handshake Secret” avec le débogueur VS, qui stocke réellement le TID => Name mapping. Windows lui-même n’a aucune notion de thread “Nom”.

À partir de Windows 10, version 1607, vous pouvez désormais obtenir le nom d’un thread à l’aide de GetThreadDescription() , en supposant que SetThreadDescription() été utilisé pour définir le nom du thread.

Voici un exemple:

 HRESULT hr = GetThreadDescription(ThreadHandle, &data); if (SUCCEEDED(hr)) { wprintf(“%ls\m”, data); LocalFree(data); } 

Voici la documentation:

https://msdn.microsoft.com/en-us/library/windows/desktop/mt774972(v=vs.85).aspx