How to monitor Pipeline stages in OmniThreadLibrar

2020-07-19 03:21发布

Is it possible to monitor Pipeline tasks somehow? I tried to add monitors to each task like this

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

but getting the exception "Task can be only monitored with a single monitor" (as I understand, it happens because the internal hidden monitor is already installed for pipeline stages).

1条回答
虎瘦雄心在
2楼-- · 2020-07-19 03:54

Use Parallel.TaskConfig.OnMessage and provide a common message processing function.

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 can be a normal procedure or a method.

查看更多
登录 后发表回答