代码之家  ›  专栏  ›  技术社区  ›  1800 INFORMATION

如何更改线程的名称

  •  9
  • 1800 INFORMATION  · 技术社区  · 17 年前

    它们都有相同的起始地址,所以线程窗口通常会显示“thread_base::start”或类似的内容。我想知道是否有API调用或允许我自定义文本的东西。

    3 回复  |  直到 17 年前
        1
  •  11
  •   Jere.Jones    17 年前

    这将放在头文件中。

    #pragma once
    
    #define MS_VC_EXCEPTION 0x406d1388
    #pragma warning(disable: 6312)
    #pragma warning(disable: 6322)
    
    typedef struct tagTHREADNAME_INFO
    {
        DWORD dwType;        // must be 0x1000
        LPCSTR szName;       // pointer to name (in same addr space)
        DWORD dwThreadID;    // thread ID (-1 caller thread)
        DWORD dwFlags;       // reserved for future use, most be zero
    } THREADNAME_INFO;
    
    inline
    void SetThreadName(DWORD dwThreadID, LPCSTR szThreadName)
    {
    #ifdef _DEBUG
        THREADNAME_INFO info;
        info.dwType = 0x1000;
        info.szName = szThreadName;
        info.dwThreadID = dwThreadID;
        info.dwFlags = 0;
    
        __try
        {
            RaiseException(MS_VC_EXCEPTION, 0, sizeof(info) / sizeof(DWORD), (DWORD *)&info);
        }
        __except (EXCEPTION_CONTINUE_EXECUTION)
        {
        }
    #else
        dwThreadID;
        szThreadName;
    #endif
    }
    

    然后我在threads进程中这样称呼它。

    SetThreadName(GetCurrentThreadId(), "VideoSource Thread");
    

    值得注意的是,这正是David发布链接的代码(谢谢!我忘了从哪里得到它)。我没有删除这篇文章,因为如果MSDN决定重新组织它的链接,我希望代码仍然可用。

        2
  •  8
  •   David Norman    17 年前
        3
  •  0
  •   Chris Guzak    9 年前

    视窗10新增 SetThreadDescription (),在这个平台上,这将是最好的方法。