delphi - 我可以使用 OTL 并行化嵌套循环吗?

标签 delphi omnithreadlibrary

我想知道是否可以使用 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 并向其中添加值。

最佳答案

如果您使用 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);

关于delphi - 我可以使用 OTL 并行化嵌套循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22989930/

相关文章:

Delphi - System.Copy 良好实践

delphi - 如何在delphi中并行编写一个for-down-to循环,在列表上事件,删除项目?

multithreading - 如何知道OmniThreadLibrary中Pipeline阶段的状态?

delphi - 使用 VirtualTreeview 和 OTL 的内存泄漏

delphi - OmniThreadLibrary 可以在 Delphi Windows 服务中使用吗?

delphi - VC工程中调用Delphi函数

delphi - T编辑焦点和插入符

delphi - 用于调试器的单独鼠标

delphi - 创建面积图,用其他颜色为溢出值的部分着色

delphi - OmniThreadLibrary - 代码 : 1816. 没有足够的配额来处理此命令