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