如何监控OmniThreadLibrary中的Pipeline阶段?

时间:2013-08-30 16:24:07

标签: delphi delphi-xe4 omnithreadlibrary

是否有可能以某种方式监控管道任务?我试图像这样为每个任务添加监视器

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

但是获得异常“任务只能用一个监视器监视”(据我所知,这是因为已经为管道阶段安装了内部隐藏监视器)。

1 个答案:

答案 0 :(得分: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可以是正常程序或方法。