1

Delphi VCL/RTL 有类似 AutoThread 类的东西吗?即,从例如 TAutoThread 类派生的类的每个方法随后将在单独的线程中自动执行,而无需编写任何线程特定的代码。

4

2 回答 2

12

使用Anonymous thread可以制作类似于 AutoThread 类的东西。

只需传递一个匿名过程并调用线程。

var
  aThread : TThread;
...
aThread := 
  TThread.CreateAnonymousThread(
    procedure
    begin
       // your code to execute in a separate thread here.
    end
  );
aThread.Start; // start thread and it will execute and self terminate

注意,这与从另一个类派生的类无关,但结果是相似的。您不必编写任何线程特定的代码。当然,您必须遵循正常的线程规则。


如果您需要在线程完成时收到通知,请OnTerminate在启动线程之前定义一个方法。它将在主线程中执行。

aThread.OnTerminate := Self.ThreadFinishedNotification; 
于 2013-09-28T17:29:00.890 回答
3

作为内置线程类的替代方案,您确实应该检查omnithreadlibrary

这更有效,因为内置了调度程序、async'n 等待方法和线程同步。一些高级函数,如 foreach.parallel(从 .net 知道)也可用。

使用 OmniThreadLibrary,您可以简单地在线程中执行代码。

Async(
  procedure begin
    // threaded code
  end).Await(
  procedure begin
    // main thread code, will be executed after threaded code finishes
  end);
于 2013-09-28T20:18:20.217 回答