1

私は 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;

上記のコード例にはかなり根本的な問題があることは承知していますが、私がやろうとしていることを理解していただければ幸いです。

4

1 に答える 1