vložil Radek Červinka
9. září 2015 22:27
Většinou používám Delphi z řady XE, ale pro některé projekty stále mám D2007. A některé věci mi vyloženě chybí, např. NameThreadForDebugging, což jsem popisoval s dalšími fíčurkami v článku Několik typů pro ladění v Delphi. A až dneska jsem zjistil, že D2007 něco podobného má, jen ne tak přímočaře.
Pro zopakování - tato funkce pojmenuje vlákno a pak je v seznamu vláken toto jméno dostupné. Sranda je, že pokud si v D2007 necháte vygenerovan TThread přes menu, tak Vám IDE vygeneruje i něco jako
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;
procedure TMyThread.SetName;
{$IFDEF MSWINDOWS}
var
ThreadNameInfo: TThreadNameInfo;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
ThreadNameInfo.FType := $1000;
ThreadNameInfo.FName := 'Moje vlakno';
ThreadNameInfo.FThreadID := $FFFFFFFF;
ThreadNameInfo.FFlags := 0;
try
RaiseException( $406D1388, 0, sizeof(ThreadNameInfo) div sizeof(LongWord), @ThreadNameInfo );
except
end;
{$ENDIF}
end;
a na začátku Execute je tato metoda zavolána. Všimněte si té RaiseException, to zas bude nějaká interní hrůza Windows.
No a za běhu to pak vypadá takto:
Blbost, ale někdy výrazně pomůže.