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