Delphi VCL/RTL 有类似 AutoThread 类的东西吗?即,从例如 TAutoThread 类派生的类的每个方法随后将在单独的线程中自动执行,而无需编写任何线程特定的代码。
问问题
281 次
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 回答