Einen unbenannten Thread in einen benannten konvertieren

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Einen Thread benennen


Sie können einen unbenannten Thread in einen benannten Thread umwandeln. Wenn Sie beispielsweise über eine Thread-Klasse verfügen, die mit Delphi 6 oder einer früheren Version erstellt wurde, so können Sie diese in einen benannten Thread konvertieren.

So konvertieren Sie einen unbenannten Thread in Delphi in einen benannten:

  1. Fügen Sie die Unit Windows in die uses-Klausel der Unit ein, in der Ihr Thread deklariert ist:
    uses
        Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF};
    
  2. Fügen Sie dem interface-Abschnitt Ihrer Thread-Klasse die Methode SetName hinzu:
    type
    TMyThread = class(TThread)
    private
      procedure SetName;
    protected
      procedure Execute; override;
    end;
    
  3. Fügen Sie den Record TThreadNameInfo und die Methode SetName in den implementation-Abschnitt ein:
     {$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}
     { TMyThread }
     procedure TMyThread.SetName;
     {$IFDEF MSWINDOWS}
     var
     ThreadNameInfo: TThreadNameInfo;
     {$ENDIF}
     begin
     {$IFDEF MSWINDOWS}
     ThreadNameInfo.FType := $1000;
     ThreadNameInfo.FName := 'MyThreadName';
     ThreadNameInfo.FThreadID := $FFFFFFFF;
     ThreadNameInfo.FFlags := 0;
     try
     RaiseException( $406D1388, 0, sizeof(ThreadNameInfo) div sizeof(LongWord), @ThreadNameInfo );
      except
       end;
     {$ENDIF}
     end;
    

    Hinweis: Setzen Sie TThreadNameInfo auf den Namen der Thread-Klasse.

    Der Debugger erkennt die Exception und ermittelt den Thread-Namen aus der übergebenen Struktur. Bei der Fehlersuche zeigt der Debugger den Namen des Thread im Thread-Statusfenster im Feld "Thread-ID" an.
  4. Fügen Sie am Anfang der Methode Execute des Thread einen Aufruf für die neue Methode SetName ein:
    procedure TMyThread.Execute;
    begin
      SetName;
      { Place thread code here }
    end;
    

So konvertieren Sie einen unbenannten Thread in C++Builder in einen benannten:


Sie können einen unbenannten Thread in einen benannten Thread umwandeln. Wenn Sie beispielsweise über eine Thread-Klasse verfügen, die mit C++Builder 5 oder einer früheren Version erstellt wurde, so können Sie diese anhand der folgenden Schritte in einen benannten Thread konvertieren.

  1. Fügen Sie Ihrer Thread-Klasse die Methode SetName hinzu:
    void TMyThread::SetName() {
    	THREADNAME_INFO info;
    	info.dwType = 0x1000;
    	info.szName = "MyThreadName";
    	info.dwThreadID = -1;
    	info.dwFlags = 0;
    	__try {
    		RaiseException(0x406D1388, 0, sizeof(info) / sizeof(DWORD),
    			(DWORD*)&info);
    	}
    	__except (EXCEPTION_CONTINUE_EXECUTION) {
    	}
    }
    

    Hinweis: Setzen Sie info.szName auf den Namen der Thread-Klasse.

    Der Debugger erkennt die Exception und ermittelt den Thread-Namen aus der übergebenen Struktur. Bei der Fehlersuche zeigt der Debugger den Namen des Thread im Thread-Statusfenster im Feld "Thread-ID" an.

  2. Fügen Sie am Anfang der Methode Execute des Thread einen Aufruf für die neue Methode SetName ein:
    void __fastcall TMyThread::Execute() {
    	SetName();
    	// ---- Place existing Execute method code here ----
    }
    

Siehe auch