c ++ - Hvordan får man navnet på en Win32-tråd?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg kender til den ikke-intuitive proces til at angive navnet på en tråd under Windows (se 'Sådan angives navn til en Win32-tråd?'). Er der en måde at få navnet på tråden på? Jeg kan ikke se nogen Windows API, som gør det muligt for mig at gøre dette (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684847(v=vs.85).aspx).]] [6]

Bedste reference


Der er ikke noget sådant WinAPI-opkald, da der ikke findes noget som trådnavne.


Hvis du angiver et trådnavn, vil debuggeren til din IDE gemme det for dig, hvilket gør det lettere at fejle.
Men navnet er aldrig rigtig knyttet til tråden ved hjælp af et Windows API-opkald.


Hvis du kører din applikation uden debugger, så er det ikke muligt at indstille et trådnavn, derfor kan du ikke hente navnet.


Selvom det ville være tilgængeligt - Jeg ville ikke skrive kode, der kun virker med en debugger vedhæftet. Lagre navnet selv sammen med håndtaget.

Andre referencer 1


Tråde har ikke faktisk navne i Win32. Processen via RaiseException er blot et 'Secret Handshake' med VS Debugger, som faktisk gemmer TID => Navn kortlægning. Windows selv har ingen ide om en tråd 'Navn '.

Andre referencer 2


Begyndende med Windows 10, version 1607, kan du nu få navnet på en tråd ved hjælp af GetThreadDescription(), forudsat at SetThreadDescription() blev brugt til at indstille trådens navn.


Her er et eksempel:


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


Her er dokumentationen:


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