【发布时间】:2013-06-02 06:46:54
【问题描述】:
使用 OmniThreadLibrary 和 Delphi XE4,我希望在后台运行多个线程来处理数据,从而提高我现有代码的速度。
调用下面的过程时,应用程序 GUI 会停止处理任何输入,直到所有线程都完成。我的理解是,即使线程正在运行,使用.NoWait 也应该允许程序退出。
procedure Test(input: TStringList; output: TList<TMaintFore>);
var
outQueue: IOmniBlockingCollection;
transaction: TOmniValue;
begin
outQueue := TOmniBlockingCollection.Create;
Parallel.ForEach(0, input.Count - 1)
.NoWait
.Into(outQueue)
.Execute(
procedure(const value: integer; var result: TOmniValue)
begin
result := TMaintFore.Create(input[value]);
end
);
end;
是不是我对 ForEach 循环的理解有误,提示我应该使用另一种方法来实现后台处理?对正确使用 OmniThreadLibrary 的任何建议表示赞赏。
【问题讨论】:
标签: delphi delphi-xe4 omnithreadlibrary