Named Threads in Delphi - wofür ist das?

Wenn Sie mit der Tool-Palette in Ihrem BDS einen TThread-Nachkommen erstellen, können Sie dem Thread einen Namen geben. Hier ist der automatisch generierte Code. Sie rufen einfach die SetName () - Funktion in der Execute-Methode auf und dem Thread, der diese Methode aufruft, wird auf seltsame Weise ein Name gegeben ...

{$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;

Ich finde es beim Debuggen sehr nützlich, dass Sie nicht nur TIDs, sondern auch so zugewiesene Thread-Namen sehen können. Sie wissen, welcher Thread welcher ist.

Bitte teilen Sie mir jedoch mit, ob auf den zugewiesenen Namen auf irgendeine Weise zugegriffen werden kann. Kann es basierend auf dem Handle eines Threads gelesen werden? Oder kann es von einem anderen Prozess auch von außerhalb des Prozesses gelesen werden? Sie wissen, dass es Anwendungen gibt, die Ihre Prozesse und die darin arbeitenden Threads auflisten. Wird dieser Name für Apps wie diese zugänglich sein?

Vielen Dank

Antworten auf die Frage(4)

Ihre Antwort auf die Frage