4

パイプラインのタスクをどうにかして監視することはできますか? このように各タスクにモニターを追加してみました

FPipeline := Parallel.Pipeline()
  .Stage(StageWorker1, Parallel.TaskConfig.MonitorWith(MyMonitor))
     .NumTasks(MaxReadThreadCount)
  .Stage(StageWorker2, Parallel.TaskConfig.MonitorWith(MyMonitor))
  .Run();

しかし、「タスクは単一のモニターでのみ監視できます」という例外が発生します(私が理解しているように、パイプラインステージ用に内部の非表示モニターが既にインストールされているために発生します)。

4

1 に答える 1

6

Parallel.TaskConfig.OnMessage を使用して、共通のメッセージ処理関数を提供します。

FPipeline := Parallel.Pipeline()
  .Stage(StageWorker1, Parallel.TaskConfig.OnMessage(MessageProc))
     .NumTasks(MaxReadThreadCount)
  .Stage(StageWorker2, Parallel.TaskConfig.OnMessage(MessageProc))
  .Run();

procedure MessageProc(var msg: TOmniMessage);
begin
  ...
end;

MessageProc通常の手順またはメソッドにすることができます。

于 2013-08-31T06:00:27.887 に答える