【发布时间】:2012-02-23 18:54:30
【问题描述】:
我希望在 Delphi 6 IDE 中的线程列表窗口中显示一个用户友好的好名称。我在网上找到了以下代码,用于在 Delphi 6 中执行此操作,因为据我所知,该版本没有本地实现 SetThreadName()。我从线程的 Execute() 方法中调用它。我知道它被调用是因为 IDE 在引发异常时弹出。但是,当我查看线程列表 (Ctrl + Alt + T) 时,我没有看到我设置的名称。我只看到通常的线程 ID、状态、状态和位置列,没有别的。
我需要做些什么不同的事情才能让线程名称出现?另外,是否有人知道如何阻止 IDE 在 RaiseException 行上暂停?我的程序中有很多线程,每次运行程序时 IDE 都会弹出 N 次,这很烦人。
我知道我可以禁止 IDE 在 Delphi Exceptions 上停止,但我通常希望这样做,而且我不希望每次创建一组新线程时都必须关闭和打开它。
Named threads in Delphi - what is that for?
procedure SetThreadName_delphi(const Name: string);
type
TThreadNameInfo =
record
RecType: LongWord;
Name: PChar;
ThreadID: LongWord;
Flags: LongWord;
end;
var
info:TThreadNameInfo;
begin
// This code is extremely strange, but it's the documented way of doing it!
info.RecType := $1000;
info.Name := PChar(Name);
info.ThreadID := $FFFFFFFF;
info.Flags := 0;
try
RaiseException($406D1388, 0,
SizeOf(info) div SizeOf(LongWord), PDWord(@info));
except
end;
end;
【问题讨论】:
-
我相信线程名只在Delphi 2010及以上版本可见。
-
不,从 D6 开始支持线程命名。
-
从头开始 - Delphi 7.
-
非常有用的一段代码!在 XE 中为我工作。谢谢让我们注意到这个。 Remy 提到的 NameThreadForDebugging 也同样有效。
-
虽然这对于 Delphi 7-2007 版本是正确的,但记录的名称字段应该是 PAnsiChar 以支持较新的 Delphi 版本。
标签: multithreading delphi exception-handling