Einen unbenannten Thread in einen benannten konvertieren
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:
-
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};
- 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;
-
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.
-
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.
- 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.
- 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 ---- }