Im Prinzip macht das Ding nicht viel, außer eine "stille"
Exception loszuwerden, welche vom Debugger ausgewertet wird. (wenn der Debugger sie kennt und drauf reagiert)
Delphi-Quellcode:
{class} procedure {TThread.}NameThreadForDebugging(AThreadName: AnsiString; AThreadID: TThreadID = TThreadID(-1));
type
TThreadNameInfo = record
FType: LongWord; // must be 0x1000
FName: PAnsiChar; // 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;
var
ThreadNameInfo: TThreadNameInfo;
begin
if IsDebuggerPresent then
begin
ThreadNameInfo.FType := $1000;
ThreadNameInfo.FName := PAnsiChar(AThreadName);
ThreadNameInfo.FThreadID := AThreadID;
ThreadNameInfo.FFlags := 0;
try
RaiseException($406D1388, 0, SizeOf(ThreadNameInfo) div SizeOf(LongWord), @ThreadNameInfo);
except
end;
end;
end;
[edit]
Seh grade, daß wurde auch schon in dem Artikel erwähnt.
Also hatte Emba sich das von der OmniThreadLibrary raubkopiert.