我可以使用OTL来并行嵌套循环吗?

4
我在想我能否使用OTL来并行化这个循环。
我有以下代码。
for i := 1 to XRes do
 begin
   for j := 1 to XRes do
     begin
       GridMat.Elem[i,j] := StrToFloat(ListOfValues[(i-1)+((j-1)*Xres)]);
     end;
   Invalidate;
 end;

是否可以将GridMat(来自SDL_matrix.TMatrix)作为参数传递到所有并行的ForEach中,并将值添加到其中。

1个回答

5
如果您使用Parallel.ForEach的同步版本(默认版本;即如果不使用NoWait修饰符),则可以通过变量捕获简单地访问GridMat。
类似这样的操作应该可以正常运行:
Parallel.ForEach(1, XRes).Execute(
  procedure (const i: integer)
  var
    j: integer;
  begin
    for j := 1 to XRes do
      GridMat.Elem[i,j] := StrToFloat(ListOfValues[(i-1)+((j-1)*Xres)]);
  end);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接