SetThreadName не работает с Visual Studio 2005

SetThreadName не устанавливает имя потока с Visual Studio 2005 при использовании, как показано ниже:

DWORD threadId;
HANDLE handle = CreateThread(NULL, stackSize, ThreadFunction,
                             ThreadParam, CREATE_SUSPENDED, &threadId);
if (handle)
{

   SetThreadName(threadId, "NiceName");
   ResumeThread(handle);
}

После открытия окна Threads вместо NiceName я вижу там имя ThreadFunction. Другие инструменты (например, Intel Parallel Inspector) используют NiceName, как и ожидалось.

  • Что-то не так с кодом выше?

  • Работает ли код с выпусками Visual Studio 2008 или 2010?


person Suma    schedule 15.03.2010    source источник


Ответы (1)


После нескольких экспериментов я обнаружил, что это связано с тем, что Visual Studio пытается быть умной, и когда поток начинает выполняться, он дает себе имя. Обходной путь заключается в том, чтобы не пытаться дать имя потоку до того, как поток фактически запустится, самый простой способ добиться этого — вызвать SetThreadName изнутри функции потока.

Тем не менее мне было бы интересно узнать, показывают ли другие версии Visual Studio такое же поведение.

person Suma    schedule 15.03.2010
comment
Я использую это в VS2010 и устанавливаю имя перед возобновлением потока, и он работает счастливо. Единственная интересная вещь, которую следует отметить, это то, что код использует CWinThread MFC. - person Stephen Bailey; 12.01.2012