如何在Delphi 2010中的delphi Thread中访问'NameThreadForDebugging'?
type
TMyThread = class(TThread)
protected
procedure Execute; override;
procedure UpdateCaption;
end;
implementation
procedure TMyThread.UpdateCaption;
begin
Form1.Caption := 'Name Thread For Debugging';
// how I get 'TestThread1' displayed in the caption
end;
procedure TMyThread.Execute;
begin
NameThreadForDebugging('TestThread1');
Synchronize(UpdateCaption);
Sleep(5000);
end;
答案 0 :(得分:13)
NameThreadForDebugging
函数,顾名思义,仅用于调试。如果要为其他目的跟踪名称,请在线程对象中保留一个字段并将名称存储在那里。使用该字段命名线程并按需填充表单的标题。
没有用于检索线程名称的API,因为线程在API级别没有名称。 NameThreadForDebugging
引发了一个特殊的异常,IDE将其识别为“命名此线程”异常。它看到异常(因为它是一个调试器),在它自己的内部调试数据结构中记下线程的名称,然后允许应用程序继续运行。应用程序捕获并忽略该异常。
但数据传输是单向的。应用程序可以通过异常向调试器发送信息,但调试器无法发回数据。操作系统对一切都没有注意到。对于操作系统,它就像任何其他例外一样。
答案 1 :(得分:2)
要执行您的要求,您需要将Name存储在您可以访问它的线程类中,例如:
type
TMyThread = class(TThread)
protected
FName: String;
procedure Execute; override;
procedure UpdateCaption;
end;
procedure TMyThread.UpdateCaption;
begin
Form1.Caption := FName;
end;
procedure TMyThread.Execute;
begin
FName := 'TestThread1';
NameThreadForDebugging(FName);
Synchronize(UpdateCaption);
Sleep(5000);
end;
答案 2 :(得分:0)
代码中心示例ID: 21893, Named Pipes上的单元DebugThreadSupport,显示了如何在旧版本的Delphi中设置线程名称。
答案 3 :(得分:-2)
AFAICS Delphi仅支持名称设置。你必须调用一些Windows API函数来获取名称。