Anzeigen: Delphi C++
Anzeigeeinstellungen

Einen unbenannten Thread in einen benannten konvertieren

Aus RAD Studio XE2
Wechseln zu: Navigation, Suche

Nach oben zu Thread-Objekte ausführen - Index

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 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}; 
   //---------------------------------------------------------------------------
  1. 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; 
    //--------------------------------------------------------------------------- 
    
    //--------------------------------------------------------------------------- 
    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) 
    { 
    } 
    } 
    //---------------------------------------------------------------------------
  2. Fügen Sie den Record TThreadNameInfo und die Methode SetName in den implementation-Abschnitt ein:

    //--------------------------------------------------------------------------- 
    {$IFDEF MSWINDOWS} 
    type 
    TThreadNameInfo = record 
    FType: LongWord;     // muss 0x1000 sein 
    FName: PChar;        // Zeiger auf den Namen (im Benutzer-Adressraum) 
    FThreadID: LongWord; // Thread-ID (-1 gibt den Thread des Aufrufers an) 
    FFlags: LongWord;    // Für zukünftige Verwendung reserviert, muss null sein 
      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.
  3. Fügen Sie am Anfang der Methode Execute des Threads einen Aufruf für die neue Methode SetName ein:

    //--------------------------------------------------------------------------- 
    procedure TMyThread.Execute; 
    begin 
    SetName; 
    { Thread-Code hier einfügen } 
    end; 
    //--------------------------------------------------------------------------- 
    
    //--------------------------------------------------------------------------- 
    void __fastcall TMyThread::Execute() 
    { SetName(); 
    //---- Quelltext der Methode Execute hier einfügen ---- 
    } 
    //---------------------------------------------------------------------------
    

Siehe auch

Frühere Versionen
In anderen Sprachen