【问题标题】:How to monitor Pipeline stages in OmniThreadLibrary?如何监控 OmniThreadLibrary 中的管道阶段?
【发布时间】:2013-08-30 16:24:07
【问题描述】:

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

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

但出现异常“只能使用单个监视器监视任务”(据我了解,这是因为已经为管道阶段安装了内部隐藏监视器)。

【问题讨论】:

  • 不使用 TOmniEventMonitor。你到底想监控什么?
  • @gabr 我想在一个地方收听来自所有阶段的消息,我想我应该为此使用监视器

标签: delphi delphi-xe4 omnithreadlibrary


【解决方案1】:

使用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可以是普通的过程,也可以是方法。

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多