2

入力ボリュームに含まれない地震ボリュームからのデータを必要とする地震属性ジェネレーターがいくつかあります。

Petrel 2010では、ジェネレーターがUIスレッドで実行されている限り、これは正常に機能しました。

Petrel 2011は、これを禁止するために非常に長い時間を費やしています。まず、ジェネレーターはメインスレッドで実行されなくなりました。次に、UIスレッドでフェッチされたIAsyncSubCubeは、属性ワーカースレッドからアクセスされた場合、InvalidOperationExceptionをスローします。例外メッセージは次のとおりです。

[ArrayBufferAccessorLink]配列データへのアクセスエラー:[RequestBroker]現在のスレッド(内部ワーカースレッド)には、新しいデータアクセスを開始する権限がありません。(この状況は、非同期の地震属性計算などの外部計算に起因している可能性があります。)例外タイプ:クラスSlb :: Salmon :: Adt :: Exceptions :: InsufficientPermissionsException

そのようなアクセスを機能させる方法はありますか?(これらのボリュームを通常の属性入力として提供することはオプションではありません。)

4

3 に答える 3

1

これはうまくいくかもしれません:

Delegate dataGetCallback = new Func<Index3, Index3, float[,,]>(GetData);

void IGenerator.Calculate(ISubCube[] inputs, ISubCube[] outputs, Index3 min, Index3 max) {
    float[,,] data = (float[,,])CoreSystem.SynchronizedInvoke.Invoke(getDataCallback, new[] { min, max });

    MyAlgorithm(outputs, data, min, max);
}

float[,,] GetData(Index3 min, Index3 max) {
    return inputDataNotPassedAsArgument.GetSubCube(min, max).ToArray();
}

同期的に実行される Invoke の代わりに CoreSystem.SynchronizedInvoke.BeginInvoke を実行することを検討してください。BeginInvoke を使用すると、データが利用可能になるのを待っている間に、「自分の」スレッドでいくつかの作業を行うことができます。

警告: 私はこれを試していません。

于 2011-08-05T21:05:45.683 に答える
1

あなたの質問に答えるには、より多くの情報が必要だと思います。

属性はトレースベースですか、それともブリックベースですか?

あなたの属性は CanGenerateAsync で何を返しますか?

サイズミック ボリュームにアクセスするために、どのような種類の API を使用していますか? (コードサンプルは素晴らしいでしょう)

最後に、属性ジェネレータ コードから、属性の入力ではないキューブにアクセスする必要があるのはなぜでしょうか? ユースケースについて詳しく教えてください。

于 2011-08-03T13:07:11.223 に答える
1

次のアプローチを使用してください。ただし、CanGenerateAsync が常に false を返すようにしてください。

    // GetAsyncSubCube in the calculation thread and use it in calculation thread
    public override void Calculate(Slb.Ocean.Petrel.DomainObject.Seismic.ISubCube[] input, Slb.Ocean.Petrel.DomainObject.Seismic.ISubCube output)
    {
        IAsyncSubCube cube = Parameters.Cube.GetAsyncSubCube(input[0].MinIJK, input[0].MaxIJK);

        foreach (Index3 index in output )
        {
            output[index] = cube[index];
        }
    }
于 2011-08-10T12:04:32.347 に答える