Delphi 2006 - XE中是否有任何新的并行编程特性?
Delphi 2006 - XE中是否有任何新的并行编程特性?
在发布版本中很少有涉及。在Delphi 2009中,他们为TThread.Synchronize
添加了对匿名方法的支持,在XE中,他们向Generics.Collections
添加了线程通信队列。
但社区贡献了一些有趣的东西。例如,请查看OmniThreadLibrary。
在 Delphi 7 之后引入的最强大但鲜为人知的多线程功能是 TThread.Queue 方法。例如,不需要
Synchronize(
procedure
begin
Form1.Memo1.Lines.Add(‘Begin Execution’);
end);
你可以使用
Queue(
procedure
begin
Form1.Memo1.Lines.Add(‘Begin Execution’);
end);
TThread.Queue 是 TThread.Synchronize 的替代品,它允许工作线程在不等待的情况下继续执行(使用 Synchronize 调用时,工作线程会等待主线程完成同步代码的执行)- 这是一个非常好的功能,可以用作使用 PostMessage 进行自定义消息处理的替代方法。
TThread.CreateAnonymousThread(
procedure begin
Sleep(10000); // replace with a real workload
end
).Start;
自2010年或XE线程可以被命名,但这只在调试器中可见(而不是在例如sysinternals之类的procesxp中)
目前即使有支持多线程运行的代码,也没有多核 CPU 可以使用。锁定和解锁问题是造成这种情况的原因。
加油!
TThread.ForceQueue()
。它类似于TThread.Queue()
,但是即使在主 UI 线程中调用,它也总是将指定的代码排队以供稍后执行。当在主 UI 线程中调用时,TThread.Queue()
不会排队执行,而是立即执行,就像TThread.Synchronize()
一样。 - Remy Lebeau