Подтвердить что ты не робот

Как получить имя потока Win32?

Я знаю неинтуитивный процесс, чтобы установить имя потока под Windows (см. "Как установить имя для потока Win32?" ). Есть ли способ получить название потока? Я не вижу никаких Windows API, которые позволяют мне это делать (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684847 (v = vs .85).aspx).

4b9b3361

Ответ 1

Нет такого вызова WinAPI, поскольку нет таких имен, как имена потоков.

Если вы установите имя потока, отладчик вашей IDE сохранит его для вас, что упростит его отладку. Однако имя никогда не привязано к потоку при вызове API Windows.

Если вы запускаете приложение без отладчика, то установка имени потока не влияет, поэтому вы не можете получить имя.

Даже если он будет доступен - я бы не написал код, который работает только с прикрепленным отладчиком. Лучше сохраните имя для себя вместе с дескриптором.

Ответ 2

В Win32 имена потоков фактически не имеют. Процесс через RaiseException является просто "секретным рукопожатием" с VS Debugger, который фактически сохраняет TID = > Сопоставление имен. В самой Windows нет понятия потока "Имя".

Ответ 3

Начиная с Windows 10, версия 1607, теперь вы можете получить имя потока с помощью GetThreadDescription(), предполагая, что SetThreadDescription() используется для установки имени потока.

Вот пример:

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

Здесь документация:

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