DentistryDoctor的专栏

欢迎大家指正其中的错误

原创 SetThreadName & GetThreadName 给线程命名收藏

新一篇: 视频传输过程中的缓冲时间自适应算法 | 旧一篇: 一个奇怪的链接错误

有很久没写过blog了,今天随便写两句。

给线程命名对于调试应该有很大的帮助。在网上找到命名线程的代码,说得很详细,但一般人也不用了解那么多。下面只贴出其中关键的部分。

typedef struct tagTHREADNAME_INFO
{
  DWORD dwType; 
// must be 0x1000
  LPCSTR szName; // pointer to name (in user addr space)
  DWORD dwThreadID; // thread ID (-1=caller thread)
  DWORD dwFlags; // reserved for future use, must be zero
}
 THREADNAME_INFO;

void SetThreadName( DWORD dwThreadID, LPCSTR szThreadName)
{
  THREADNAME_INFO info;
  
{
    info.dwType 
= 0x1000;
    info.szName 
= szThreadName;
    info.dwThreadID 
= dwThreadID;
    info.dwFlags 
= 0;
  }

  __try
  
{
    RaiseException( 
0x406D13880sizeof(info)/sizeof(DWORD), (DWORD*)&info );
  }

  __except (EXCEPTION_CONTINUE_EXECUTION)
  
{
  }

}


char* GetThreadName(void)
{
    
char* pszName=NULL;
    __asm
{
        mov eax, fs:[
0x18]    //    Locate the caller's TIB
        mov eax, [eax+0x14]    //    Read the pvArbitary field in the TIB
        mov [pszName], eax    //    pszName = pTIB->pvArbitary
    }

    
return pszName ? pszName : "Win32 Thread";
}

发表于 @ 2007年06月09日 19:37:00|评论(loading...)|编辑

新一篇: 视频传输过程中的缓冲时间自适应算法 | 旧一篇: 一个奇怪的链接错误

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © DentistryDoctor