我正在运行 Delphi XE2 并试图熟悉 OmniThreadLibrary,我安装了 3.03b。
我一直在查看 Parallel.ForEach 示例,但不确定后台发生了什么(这可能稍后会很明显 - 抱歉)。您可以提供任何信息来帮助我更好地了解如何实现我的目标,我们将不胜感激。
假设我有一些记录只是 2 个相关值 a 和 b 的容器。然后我想运行一个返回这些记录数组的并行循环。是否可以使用 OmniThreadLibrary 做到这一点?
例如,以 MultithreadingMadeSimple ForEachUnorderedPrimes 示例为基础,我可以执行以下操作:
function GetMyRecordArray(n: Integer): myRecordArray; {Just a type of Array of myRecord}
var
a, b: Double;
record: TOmniValue;
recordQueue: IOmniBlockingCollection;
i: Integer;
begin
SetLength(RESULT, n)
recordQueue := TOmniBlockingCollection.Create;
Parallel.ForEach(1, n).Execute(
procedure (const value: integer)
begin
a := {SOME FUNCTION OF value};
b := {SOME FUNCTION OF value};
recordQueue.Add(myRecord.New(a,b));
end;
end);
i := 0;
for record in recordQueue do
begin
i := i + 1;
RESULT[i - 1] := record;
end;
end;
我知道上面的代码示例存在一些非常基本的问题,但我希望你能理解我想要做什么。