Einen unbenannten Thread in einen benannten konvertieren

Aus RAD Studio

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