Как получить название Win32 Thread? - PullRequest
14 голосов
/ 20 февраля 2012

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

Ответы [ 3 ]

17 голосов
/ 20 февраля 2012

У потоков нет имен в Win32.Процесс через RaiseException - это просто «Секретное рукопожатие» с отладчиком VS, который на самом деле хранит сопоставление имен TID =>.Сама Windows не имеет понятия о потоке «Имя».

12 голосов
/ 20 февраля 2012

Нет такого вызова WinAPI, так как не существует такого понятия, как имена потоков.

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

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

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

11 голосов
/ 28 января 2017

Начиная с 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...