Именованные потоки в Delphi - для чего они нужны?

Когда вы создаете потомка TThread с помощью инструментальной палитры в вашем BDS, вы можете указать имя для потока. Вот автоматически сгенерированный код. Вы просто вызываете функцию SetName () в методе Execute, и потоку, вызывающему этот метод, дается имя каким-то странным образом ...

{$IFDEF MSWINDOWS}
type
  TThreadNameInfo = record
    FType: LongWord;     // must be 0x1000
    FName: PChar;        // pointer to name (in user address space)
    FThreadID: LongWord; // thread ID (-1 indicates caller thread)
    FFlags: LongWord;    // reserved for future use, must be zero
  end;
{$ENDIF}

{ TTestThread }

procedure TTestThread.SetName;
{$IFDEF MSWINDOWS}
var
  ThreadNameInfo: TThreadNameInfo;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
  ThreadNameInfo.FType := $1000;
  ThreadNameInfo.FName := 'ThreadName';
  ThreadNameInfo.FThreadID := $FFFFFFFF;
  ThreadNameInfo.FFlags := 0;

  try
    RaiseException( $406D1388, 0, sizeof(ThreadNameInfo) div sizeof(LongWord), @ThreadNameInfo );
  except
  end;
{$ENDIF}
end;

Я считаю, что это действительно полезно во время отладки, поскольку вы можете видеть не только TID, но и также назначаются имена потоков. Благодаря этому вы знаете, какой поток является каким.

Пожалуйста, скажите мне, однако, можно ли получить доступ к назначенному имени каким-либо образом. Можно ли его прочитать на основе дескриптора потока? Или его можно прочитать даже «вне» процесса другим процессом? Вы знаете, есть приложения, которые перечисляют ваши процессы и потоки, работающие в них. Будет ли это имя доступно для таких приложений?

Спасибо!

6
задан Mariusz Schimke 5 October 2010 в 13:56
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: