삽질하는플머

'Thread namming'에 해당되는 글 1건

  1. 쓰레드에 이름 달아주기

쓰레드에 이름 달아주기

탐구생활/Delphi

쓰레드 코딩을 하다보면... 디버깅창에 줄줄이 나타난 쓰레드가 어디서 만든 뭐하는 녀석인지 궁금할 때가 있다. 

이 때 각 쓰레드마다 이름을 붙여둔다면 심적으로나마 편안함을 얻을 수 있지 않을까... 


물론 디버깅에서만 유효하지만, 좋은 내용이 있어 공유한다. 


http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx

http://blogs.msdn.com/b/stevejs/archive/2005/12/19/505815.aspx


const

  MS_VC_EXCEPTION = $406D1388;

  

type

  TThreadNameInfo = record

    dwType: DWORD;      // Must be 0x1000.

    szName: PAnsiChar;  // Pointer to name (in user addr space).

    dwThreadID: DWORD;  // Thread ID (-1=caller thread).

    dwFlags: DWORD;     // Reserved for future use, must be zero.

  end;


procedure SetThreadName(aThreadID: DWORD; const aThreadName: PAnsiChar);

var

  tmi: TThreadNameInfo;

begin

  if (DebugHook = 0) then Exit; 


  tmi.dwType := $1000;

  tmi.szName := aThreadName;

  tmi.dwThreadID := aThreadID;

  tmi.dwFlags := 0;

  try

    RaiseException(MS_VC_EXCEPTION, 0, sizeof(tmi) div sizeof(LongWord), PDWORD(@tmi));

  except

  end;

end;



사용법은 다음과 같이. 


procedure TForm1.FormCreate(Sender: TObject);
begin
  SetThreadName(GetCurrentThreadID, 'Main thread'); 
end;


IDE의 디버깅창을 들여다보면, 예쁘게 이름이 붙은 쓰레드를 확인할 수 있다 .